Autogenerated HTML docs for v2.43.0-76-g1a87c 
diff --git a/MyFirstContribution.html b/MyFirstContribution.html index 343944b..d8e3204 100644 --- a/MyFirstContribution.html +++ b/MyFirstContribution.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>My First Contribution to the Git Project</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -2097,7 +2097,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-07 12:13:08 JST  + 2023-11-06 19:13:08 PST   </div>   </div>   </body>  
diff --git a/MyFirstObjectWalk.html b/MyFirstObjectWalk.html index ac258e1..1542cd6 100644 --- a/MyFirstObjectWalk.html +++ b/MyFirstObjectWalk.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>My First Object Walk</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -1737,7 +1737,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-07-18 03:51:48 JST  + 2023-07-17 11:51:48 PDT   </div>   </div>   </body>  
diff --git a/RelNotes/2.44.0.txt b/RelNotes/2.44.0.txt new file mode 100644 index 0000000..6a2bd93 --- /dev/null +++ b/RelNotes/2.44.0.txt 
@@ -0,0 +1,43 @@ +Git v2.44 Release Notes +======================= + +UI, Workflows & Features + + * "git add" and "git stash" learned to support the ":(attr:...)" + magic pathspec. + + * "git rebase --autosquash" is now enabled for non-interactive rebase, + but it is still incompatible with the apply backend. + + +Performance, Internal Implementation, Development Support etc. + + * Process to add some form of low-level unit tests has started. + + * Add support for GitLab CI. + + * "git for-each-ref --no-sort" still sorted the refs alphabetically + which paid non-trivial cost. It has been redefined to show output + in an unspecified order, to allow certain optimizations to take + advantage of. + + +Fixes since v2.43 +----------------- + + * The way CI testing used "prove" could lead to running the test + suite twice needlessly, which has been corrected. + (merge e7e03ef995 js/ci-discard-prove-state later to maint). + + * Update ref-related tests. + + * "git format-patch --encode-email-headers" ignored the option when + preparing the cover letter, which has been corrected. + + * Newer versions of Getopt::Long started giving warnings against our + (ab)use of it in "git send-email". Bump the minimum version + requirement for Perl to 5.8.1 (from September 2002) to allow + simplifying our implementation. + (merge 6ff658cc78 tz/send-email-negatable-options later to maint). + + * Other code cleanup, docfix, build fix, etc. 
diff --git a/ReviewingGuidelines.html b/ReviewingGuidelines.html index 3a90dc2..a8a6d0e 100644 --- a/ReviewingGuidelines.html +++ b/ReviewingGuidelines.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Reviewing Patches in the Git Project</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -975,7 +975,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/SubmittingPatches.html b/SubmittingPatches.html index b7f7c8c..e3ee3c4 100644 --- a/SubmittingPatches.html +++ b/SubmittingPatches.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Submitting Patches</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -1518,7 +1518,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:08 JST  + 2023-11-20 08:57:08 PST   </div>   </div>   </body>  
diff --git a/ToolsForGit.html b/ToolsForGit.html index 6e9b207..192f53e 100644 --- a/ToolsForGit.html +++ b/ToolsForGit.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Tools for developing Git</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -806,7 +806,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/everyday.html b/everyday.html index 58e5f99..9d430f9 100644 --- a/everyday.html +++ b/everyday.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Everyday Git With 20 Commands Or So</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -751,7 +751,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-add.html b/git-add.html index 7e41b4a..1514e39 100644 --- a/git-add.html +++ b/git-add.html 
@@ -1425,7 +1425,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-02-23 08:29:29 JST  + 2023-02-22 15:29:29 PST   </div>   </div>   </body>  
diff --git a/git-am.html b/git-am.html index c38311c..6546f3a 100644 --- a/git-am.html +++ b/git-am.html 
@@ -1289,7 +1289,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/git-annotate.html b/git-annotate.html index 3ce050a..d38dbe2 100644 --- a/git-annotate.html +++ b/git-annotate.html 
@@ -1089,7 +1089,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-apply.html b/git-apply.html index 06b9dff..cf6d549 100644 --- a/git-apply.html +++ b/git-apply.html 
@@ -1248,7 +1248,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-archimport.html b/git-archimport.html index 74ae5b0..4884021 100644 --- a/git-archimport.html +++ b/git-archimport.html 
@@ -905,7 +905,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-archive.html b/git-archive.html index 7ad8d45..16a1105 100644 --- a/git-archive.html +++ b/git-archive.html 
@@ -1159,7 +1159,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-bisect.html b/git-bisect.html index 4c30d2f..f4b649d 100644 --- a/git-bisect.html +++ b/git-bisect.html 
@@ -1244,7 +1244,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-31 15:29:48 JST  + 2023-10-30 23:29:48 PDT   </div>   </div>   </body>  
diff --git a/git-blame.html b/git-blame.html index af1e070..9c0a73b 100644 --- a/git-blame.html +++ b/git-blame.html 
@@ -1498,7 +1498,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-branch.html b/git-branch.html index 33c7c65..35b0708 100644 --- a/git-branch.html +++ b/git-branch.html 
@@ -1592,7 +1592,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/git-bugreport.html b/git-bugreport.html index 32141e7..280115b 100644 --- a/git-bugreport.html +++ b/git-bugreport.html 
@@ -880,7 +880,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-bundle.html b/git-bundle.html index 696f2b0..2c870b9 100644 --- a/git-bundle.html +++ b/git-bundle.html 
@@ -1104,7 +1104,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-03-20 07:16:41 JST  + 2023-03-19 15:16:41 PDT   </div>   </div>   </body>  
diff --git a/git-cat-file.html b/git-cat-file.html index e6bf311..21057aa 100644 --- a/git-cat-file.html +++ b/git-cat-file.html 
@@ -1342,7 +1342,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-19 05:44:22 JST  + 2023-10-18 13:44:22 PDT   </div>   </div>   </body>  
diff --git a/git-check-attr.html b/git-check-attr.html index 04b9899..be89417 100644 --- a/git-check-attr.html +++ b/git-check-attr.html 
@@ -970,7 +970,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-check-ignore.html b/git-check-ignore.html index 4d72e6d..344c29e 100644 --- a/git-check-ignore.html +++ b/git-check-ignore.html 
@@ -924,7 +924,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-check-mailmap.html b/git-check-mailmap.html index a45a0bf..421cbf8 100644 --- a/git-check-mailmap.html +++ b/git-check-mailmap.html 
@@ -811,7 +811,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-01-26 11:03:13 JST  + 2021-01-25 18:03:13 PST   </div>   </div>   </body>  
diff --git a/git-check-ref-format.html b/git-check-ref-format.html index 6c92aff..abcf6ef 100644 --- a/git-check-ref-format.html +++ b/git-check-ref-format.html 
@@ -963,7 +963,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-checkout-index.html b/git-checkout-index.html index 313fc64..c4c0fd2 100644 --- a/git-checkout-index.html +++ b/git-checkout-index.html 
@@ -1020,7 +1020,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-checkout.html b/git-checkout.html index c9d94da..d9e0cf9 100644 --- a/git-checkout.html +++ b/git-checkout.html 
@@ -1633,7 +1633,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-cherry-pick.html b/git-cherry-pick.html index 3b421e8..353bbfb 100644 --- a/git-cherry-pick.html +++ b/git-cherry-pick.html 
@@ -1217,7 +1217,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-01-22 10:52:14 JST  + 2023-01-21 17:52:14 PST   </div>   </div>   </body>  
diff --git a/git-cherry.html b/git-cherry.html index 6f997f8..2f56651 100644 --- a/git-cherry.html +++ b/git-cherry.html 
@@ -915,7 +915,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-citool.html b/git-citool.html index 2769f78..c7530ab 100644 --- a/git-citool.html +++ b/git-citool.html 
@@ -776,7 +776,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-clean.html b/git-clean.html index 504cfc6..0e947da 100644 --- a/git-clean.html +++ b/git-clean.html 
@@ -992,7 +992,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-clone.html b/git-clone.html index 67194bc..39b3f6c 100644 --- a/git-clone.html +++ b/git-clone.html 
@@ -1513,7 +1513,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-04-21 07:18:02 JST  + 2023-04-20 15:18:02 PDT   </div>   </div>   </body>  
diff --git a/git-column.html b/git-column.html index 812bc8d..bf89dcc 100644 --- a/git-column.html +++ b/git-column.html 
@@ -1015,7 +1015,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-15 05:23:11 JST  + 2022-09-14 13:23:11 PDT   </div>   </div>   </body>  
diff --git a/git-commit-graph.html b/git-commit-graph.html index a76d53e..c7e3188 100644 --- a/git-commit-graph.html +++ b/git-commit-graph.html 
@@ -989,7 +989,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-commit-tree.html b/git-commit-tree.html index e88f69a..39a88be 100644 --- a/git-commit-tree.html +++ b/git-commit-tree.html 
@@ -1029,7 +1029,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-04-25 15:01:58 JST  + 2020-04-24 23:01:58 PDT   </div>   </div>   </body>  
diff --git a/git-commit.html b/git-commit.html index e60c160..539622f 100644 --- a/git-commit.html +++ b/git-commit.html 
@@ -1840,7 +1840,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-05 07:43:56 JST  + 2023-10-04 15:43:56 PDT   </div>   </div>   </body>  
diff --git a/git-config.html b/git-config.html index 217b780..f79d468 100644 --- a/git-config.html +++ b/git-config.html 
@@ -9656,7 +9656,9 @@  </dt>   <dd>   <p>  - If set to true enable <code>--autosquash</code> option by default.  + If set to true, enable the <code>--autosquash</code> option of  + <a href="git-rebase.html">git-rebase(1)</a> by default for interactive mode.  + This can be overridden with the <code>--no-autosquash</code> option.   </p>   </dd>   <dt class="hdlist1">  @@ -11845,7 +11847,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-09-23 09:04:28 JST  + 2023-09-22 17:04:28 PDT   </div>   </div>   </body>  
diff --git a/git-count-objects.html b/git-count-objects.html index 5cd6455..d54a5c8 100644 --- a/git-count-objects.html +++ b/git-count-objects.html 
@@ -815,7 +815,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-credential-cache--daemon.html b/git-credential-cache--daemon.html index 35672fc..0b7a874 100644 --- a/git-credential-cache--daemon.html +++ b/git-credential-cache--daemon.html 
@@ -786,7 +786,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-credential-cache.html b/git-credential-cache.html index 0ef9e6c..bfe10c9 100644 --- a/git-credential-cache.html +++ b/git-credential-cache.html 
@@ -845,7 +845,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-credential-store.html b/git-credential-store.html index 8b01eac..c64a1ae 100644 --- a/git-credential-store.html +++ b/git-credential-store.html 
@@ -882,7 +882,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-credential.html b/git-credential.html index 614f6b0..ce596fc 100644 --- a/git-credential.html +++ b/git-credential.html 
@@ -986,7 +986,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-cvsexportcommit.html b/git-cvsexportcommit.html index 5f22365..71f7428 100644 --- a/git-cvsexportcommit.html +++ b/git-cvsexportcommit.html 
@@ -951,7 +951,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-cvsimport.html b/git-cvsimport.html index 83ecbbe..af3a9ca 100644 --- a/git-cvsimport.html +++ b/git-cvsimport.html 
@@ -1107,7 +1107,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-cvsserver.html b/git-cvsserver.html index a675dc4..a9f96a9 100644 --- a/git-cvsserver.html +++ b/git-cvsserver.html 
@@ -1327,7 +1327,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-24 05:24:09 JST  + 2023-06-23 13:24:09 PDT   </div>   </div>   </body>  
diff --git a/git-daemon.html b/git-daemon.html index f30e5b9..5e2fa7a 100644 --- a/git-daemon.html +++ b/git-daemon.html 
@@ -1281,7 +1281,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-describe.html b/git-describe.html index 144f232..43efd6c 100644 --- a/git-describe.html +++ b/git-describe.html 
@@ -1042,7 +1042,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-24 05:24:09 JST  + 2023-06-23 13:24:09 PDT   </div>   </div>   </body>  
diff --git a/git-diagnose.html b/git-diagnose.html index 505b40e..4fc8388 100644 --- a/git-diagnose.html +++ b/git-diagnose.html 
@@ -858,7 +858,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-08-26 07:15:05 JST  + 2022-08-25 15:15:05 PDT   </div>   </div>   </body>  
diff --git a/git-diff-files.html b/git-diff-files.html index 9077941..2c512cf 100644 --- a/git-diff-files.html +++ b/git-diff-files.html 
@@ -2716,7 +2716,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-diff-index.html b/git-diff-index.html index 68865ed..238db47 100644 --- a/git-diff-index.html +++ b/git-diff-index.html 
@@ -2810,7 +2810,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-diff-tree.html b/git-diff-tree.html index 1fed50f..54ca361 100644 --- a/git-diff-tree.html +++ b/git-diff-tree.html 
@@ -4044,7 +4044,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-diff.html b/git-diff.html index e81d8a1..34f703e 100644 --- a/git-diff.html +++ b/git-diff.html 
@@ -3679,7 +3679,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-24 05:24:09 JST  + 2023-06-23 13:24:09 PDT   </div>   </div>   </body>  
diff --git a/git-difftool.html b/git-difftool.html index d55bfc4..62858e6 100644 --- a/git-difftool.html +++ b/git-difftool.html 
@@ -1055,7 +1055,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-fast-export.html b/git-fast-export.html index 5de4830..fa7da21 100644 --- a/git-fast-export.html +++ b/git-fast-export.html 
@@ -1120,7 +1120,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-fast-import.html b/git-fast-import.html index ee86b99..a7047a3 100644 --- a/git-fast-import.html +++ b/git-fast-import.html 
@@ -2640,7 +2640,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-fetch-pack.html b/git-fetch-pack.html index ae0cb50..95a4f98 100644 --- a/git-fetch-pack.html +++ b/git-fetch-pack.html 
@@ -983,7 +983,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-fetch.html b/git-fetch.html index 18406e8..1fdd611 100644 --- a/git-fetch.html +++ b/git-fetch.html 
@@ -2237,7 +2237,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-05-16 08:02:03 JST  + 2023-05-15 16:02:03 PDT   </div>   </div>   </body>  
diff --git a/git-filter-branch.html b/git-filter-branch.html index bb44565..73d68b5 100644 --- a/git-filter-branch.html +++ b/git-filter-branch.html 
@@ -1626,7 +1626,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-02 15:43:13 JST  + 2020-11-01 22:43:13 PST   </div>   </div>   </body>  
diff --git a/git-fmt-merge-msg.html b/git-fmt-merge-msg.html index 448dc1f..6966f1e 100644 --- a/git-fmt-merge-msg.html +++ b/git-fmt-merge-msg.html 
@@ -917,7 +917,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-01-06 07:13:29 JST  + 2022-01-05 14:13:29 PST   </div>   </div>   </body>  
diff --git a/git-for-each-ref.html b/git-for-each-ref.html index 6798e11..a9d5256 100644 --- a/git-for-each-ref.html +++ b/git-for-each-ref.html 
@@ -822,18 +822,14 @@  </dt>   <dd>   <p>  - A string that interpolates <code>%(fieldname)</code> from a ref being shown  - and the object it points at. If <code>fieldname</code>  - is prefixed with an asterisk (<code>*</code>) and the ref points  - at a tag object, use the value for the field in the object  - which the tag object refers to (instead of the field in the tag object).  - When unspecified, <code>&lt;format&gt;</code> defaults to  - <code>%(objectname) SPC %(objecttype) TAB %(refname)</code>.  - It also interpolates <code>%%</code> to <code>%</code>, and <code>%xx</code> where <code>xx</code>  - are hex digits interpolates to character with hex code  - <code>xx</code>; for example <code>%00</code> interpolates to <code>\0</code> (NUL),  - <code>%09</code> to <code>\t</code> (TAB) and <code>%0a</code> to <code>\n</code> (LF).  + A string that interpolates <code>%(fieldname)</code> from a ref being shown and  + the object it points at. In addition, the string literal <code>%%</code>  + renders as <code>%</code> and <code>%xx</code> - where <code>xx</code> are hex digits - renders as  + the character with hex code <code>xx</code>. For example, <code>%00</code> interpolates to  + <code>\0</code> (NUL), <code>%09</code> to <code>\t</code> (TAB), and <code>%0a</code> to <code>\n</code> (LF).   </p>  +<div class="paragraph"><p>When unspecified, <code>&lt;format&gt;</code> defaults to <code>%(objectname) SPC %(objecttype)  +TAB %(refname)</code>.</p></div>   </dd>   <dt class="hdlist1">   --color[=&lt;when&gt;]  @@ -1262,6 +1258,9 @@  fields will correspond to the appropriate date or name-email-date tuple   from the <code>committer</code> or <code>tagger</code> fields depending on the object type.   These are intended for working on a mix of annotated and lightweight tags.</p></div>  +<div class="paragraph"><p>For tag objects, a <code>fieldname</code> prefixed with an asterisk (<code>*</code>) expands to  +the <code>fieldname</code> value of the peeled object, rather than that of the tag  +object itself.</p></div>   <div class="paragraph"><p>Fields that have name-email-date tuple as its value (<code>author</code>,   <code>committer</code>, and <code>tagger</code>) can be suffixed with <code>name</code>, <code>email</code>,   and <code>date</code> to extract the named component. For email fields (<code>authoremail</code>,  @@ -1498,7 +1497,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-05 07:43:56 JST  + 2023-12-09 17:40:53 PST   </div>   </div>   </body>  
diff --git a/git-for-each-ref.txt b/git-for-each-ref.txt index e86d570..be9543f 100644 --- a/git-for-each-ref.txt +++ b/git-for-each-ref.txt 
@@ -51,17 +51,14 @@ 	key.    --format=<format>:: -	A string that interpolates `%(fieldname)` from a ref being shown -	and the object it points at. If `fieldname` -	is prefixed with an asterisk (`*`) and the ref points -	at a tag object, use the value for the field in the object -	which the tag object refers to (instead of the field in the tag object). -	When unspecified, `<format>` defaults to -	`%(objectname) SPC %(objecttype) TAB %(refname)`. -	It also interpolates `%%` to `%`, and `%xx` where `xx` -	are hex digits interpolates to character with hex code -	`xx`; for example `%00` interpolates to `\0` (NUL), -	`%09` to `\t` (TAB) and `%0a` to `\n` (LF). +	A string that interpolates `%(fieldname)` from a ref being shown and +	the object it points at. In addition, the string literal `%%` +	renders as `%` and `%xx` - where `xx` are hex digits - renders as +	the character with hex code `xx`. For example, `%00` interpolates to +	`\0` (NUL), `%09` to `\t` (TAB), and `%0a` to `\n` (LF). ++ +When unspecified, `<format>` defaults to `%(objectname) SPC %(objecttype) +TAB %(refname)`.    --color[=<when>]:: 	Respect any colors specified in the `--format` option. The @@ -298,6 +295,10 @@  from the `committer` or `tagger` fields depending on the object type.  These are intended for working on a mix of annotated and lightweight tags.   +For tag objects, a `fieldname` prefixed with an asterisk (`*`) expands to +the `fieldname` value of the peeled object, rather than that of the tag +object itself. +  Fields that have name-email-date tuple as its value (`author`,  `committer`, and `tagger`) can be suffixed with `name`, `email`,  and `date` to extract the named component. For email fields (`authoremail`, 
diff --git a/git-for-each-repo.html b/git-for-each-repo.html index 4ee7059..1b26989 100644 --- a/git-for-each-repo.html +++ b/git-for-each-repo.html 
@@ -812,7 +812,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-11-21 15:32:32 JST  + 2020-11-20 22:32:32 PST   </div>   </div>   </body>  
diff --git a/git-format-patch.html b/git-format-patch.html index 01b1942..d2e154a 100644 --- a/git-format-patch.html +++ b/git-format-patch.html 
@@ -2618,7 +2618,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-fsck-objects.html b/git-fsck-objects.html index 61b56b3..6618176 100644 --- a/git-fsck-objects.html +++ b/git-fsck-objects.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-fsck.html b/git-fsck.html index a7999a7..148c3b9 100644 --- a/git-fsck.html +++ b/git-fsck.html 
@@ -1591,7 +1591,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-fsmonitor--daemon.html b/git-fsmonitor--daemon.html index 7976b26..d04cb8e 100644 --- a/git-fsmonitor--daemon.html +++ b/git-fsmonitor--daemon.html 
@@ -900,7 +900,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-gc.html b/git-gc.html index c22b144..cc259c1 100644 --- a/git-gc.html +++ b/git-gc.html 
@@ -1257,7 +1257,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-19 05:44:22 JST  + 2023-10-18 13:44:22 PDT   </div>   </div>   </body>  
diff --git a/git-get-tar-commit-id.html b/git-get-tar-commit-id.html index c79954b..fe99480 100644 --- a/git-get-tar-commit-id.html +++ b/git-get-tar-commit-id.html 
@@ -778,7 +778,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-grep.html b/git-grep.html index ee052fc..7ab380c 100644 --- a/git-grep.html +++ b/git-grep.html 
@@ -1489,7 +1489,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-gui.html b/git-gui.html index fbaad63..d297f88 100644 --- a/git-gui.html +++ b/git-gui.html 
@@ -945,7 +945,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-hash-object.html b/git-hash-object.html index c5edeb1..b558045 100644 --- a/git-hash-object.html +++ b/git-hash-object.html 
@@ -855,7 +855,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-help.html b/git-help.html index d2102ac..1fd38ca 100644 --- a/git-help.html +++ b/git-help.html 
@@ -1056,7 +1056,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-hook.html b/git-hook.html index dae5525..5068e5a 100644 --- a/git-hook.html +++ b/git-hook.html 
@@ -824,7 +824,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-http-backend.html b/git-http-backend.html index f020c8d..a0fb2b8 100644 --- a/git-http-backend.html +++ b/git-http-backend.html 
@@ -1102,7 +1102,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-http-fetch.html b/git-http-fetch.html index 2733180..0ab1d00 100644 --- a/git-http-fetch.html +++ b/git-http-fetch.html 
@@ -860,7 +860,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-http-push.html b/git-http-push.html index 2e1f9f7..cf2c855 100644 --- a/git-http-push.html +++ b/git-http-push.html 
@@ -908,7 +908,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-imap-send.html b/git-imap-send.html index 6611ce2..959a11e 100644 --- a/git-imap-send.html +++ b/git-imap-send.html 
@@ -1028,7 +1028,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-15 05:23:11 JST  + 2022-09-14 13:23:11 PDT   </div>   </div>   </body>  
diff --git a/git-index-pack.html b/git-index-pack.html index 2488ac7..5555f40 100644 --- a/git-index-pack.html +++ b/git-index-pack.html 
@@ -985,7 +985,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-init-db.html b/git-init-db.html index a9ff2fc..407cb07 100644 --- a/git-init-db.html +++ b/git-init-db.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-init.html b/git-init.html index e98713a..976b080 100644 --- a/git-init.html +++ b/git-init.html 
@@ -1038,7 +1038,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-instaweb.html b/git-instaweb.html index f0e8893..23f6e05 100644 --- a/git-instaweb.html +++ b/git-instaweb.html 
@@ -907,7 +907,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-interpret-trailers.html b/git-interpret-trailers.html index 4b3fce6..32ee9a6 100644 --- a/git-interpret-trailers.html +++ b/git-interpret-trailers.html 
@@ -1393,7 +1393,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-14 07:25:25 JST  + 2023-10-13 15:25:25 PDT   </div>   </div>   </body>  
diff --git a/git-log.html b/git-log.html index 7c43879..bdf1a1a 100644 --- a/git-log.html +++ b/git-log.html 
@@ -5666,7 +5666,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-ls-files.html b/git-ls-files.html index 9eeb499..8c908bc 100644 --- a/git-ls-files.html +++ b/git-ls-files.html 
@@ -1382,7 +1382,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-ls-remote.html b/git-ls-remote.html index 3391bd9..90781dd 100644 --- a/git-ls-remote.html +++ b/git-ls-remote.html 
@@ -987,7 +987,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-14 05:57:42 JST  + 2023-06-13 13:57:42 PDT   </div>   </div>   </body>  
diff --git a/git-ls-tree.html b/git-ls-tree.html index 5d83186..e20b965 100644 --- a/git-ls-tree.html +++ b/git-ls-tree.html 
@@ -1028,7 +1028,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-24 05:24:09 JST  + 2023-06-23 13:24:09 PDT   </div>   </div>   </body>  
diff --git a/git-mailinfo.html b/git-mailinfo.html index 78995ec..749f046 100644 --- a/git-mailinfo.html +++ b/git-mailinfo.html 
@@ -972,7 +972,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-15 05:23:11 JST  + 2022-09-14 13:23:11 PDT   </div>   </div>   </body>  
diff --git a/git-mailsplit.html b/git-mailsplit.html index 939aaef..5f1c2db 100644 --- a/git-mailsplit.html +++ b/git-mailsplit.html 
@@ -860,7 +860,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-maintenance.html b/git-maintenance.html index dfe43f1..5f08167 100644 --- a/git-maintenance.html +++ b/git-maintenance.html 
@@ -1359,7 +1359,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-merge-base.html b/git-merge-base.html index e2a1dc3..e86337e 100644 --- a/git-merge-base.html +++ b/git-merge-base.html 
@@ -1017,7 +1017,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-merge-file.html b/git-merge-file.html index eb821bc..ab5fed5 100644 --- a/git-merge-file.html +++ b/git-merge-file.html 
@@ -919,7 +919,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-09 02:04:31 JST  + 2023-11-08 09:04:31 PST   </div>   </div>   </body>  
diff --git a/git-merge-index.html b/git-merge-index.html index d4128b4..2cedbc8 100644 --- a/git-merge-index.html +++ b/git-merge-index.html 
@@ -852,7 +852,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-merge-one-file.html b/git-merge-one-file.html index 907a401..1c961f4 100644 --- a/git-merge-one-file.html +++ b/git-merge-one-file.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-merge-tree.html b/git-merge-tree.html index b46a763..a429f6a 100644 --- a/git-merge-tree.html +++ b/git-merge-tree.html 
@@ -1152,7 +1152,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-merge.html b/git-merge.html index f4d79c0..d5dda7f 100644 --- a/git-merge.html +++ b/git-merge.html 
@@ -2336,7 +2336,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-mergetool--lib.html b/git-mergetool--lib.html index 7f04aab..6f4780f 100644 --- a/git-mergetool--lib.html +++ b/git-mergetool--lib.html 
@@ -832,7 +832,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-mergetool.html b/git-mergetool.html index b1cffd2..8c8886e 100644 --- a/git-mergetool.html +++ b/git-mergetool.html 
@@ -1342,7 +1342,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-mktag.html b/git-mktag.html index 2767aa6..037c05c 100644 --- a/git-mktag.html +++ b/git-mktag.html 
@@ -828,7 +828,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-mktree.html b/git-mktree.html index 2aa6e04..1bb98f7 100644 --- a/git-mktree.html +++ b/git-mktree.html 
@@ -811,7 +811,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-multi-pack-index.html b/git-multi-pack-index.html index 8e0a906..db7631b 100644 --- a/git-multi-pack-index.html +++ b/git-multi-pack-index.html 
@@ -958,7 +958,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-11 06:40:17 JST  + 2022-10-10 14:40:17 PDT   </div>   </div>   </body>  
diff --git a/git-mv.html b/git-mv.html index ced14c8..e928ca7 100644 --- a/git-mv.html +++ b/git-mv.html 
@@ -857,7 +857,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-name-rev.html b/git-name-rev.html index 9f83873..74e35af 100644 --- a/git-name-rev.html +++ b/git-name-rev.html 
@@ -903,7 +903,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-notes.html b/git-notes.html index 689a7b6..849ec4c 100644 --- a/git-notes.html +++ b/git-notes.html 
@@ -1396,7 +1396,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-08-18 09:18:11 JST  + 2023-08-17 17:18:11 PDT   </div>   </div>   </body>  
diff --git a/git-p4.html b/git-p4.html index ee0d4df..ed16cfb 100644 --- a/git-p4.html +++ b/git-p4.html 
@@ -1974,7 +1974,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-05-21 09:49:41 JST  + 2022-05-20 17:49:41 PDT   </div>   </div>   </body>  
diff --git a/git-pack-objects.html b/git-pack-objects.html index 5b73781..f5cc212 100644 --- a/git-pack-objects.html +++ b/git-pack-objects.html 
@@ -1388,7 +1388,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-11 03:55:22 JST  + 2023-10-10 11:55:22 PDT   </div>   </div>   </body>  
diff --git a/git-pack-redundant.html b/git-pack-redundant.html index e0002ac..92bfb27 100644 --- a/git-pack-redundant.html +++ b/git-pack-redundant.html 
@@ -834,7 +834,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-04-07 05:56:57 JST  + 2023-04-06 13:56:57 PDT   </div>   </div>   </body>  
diff --git a/git-pack-refs.html b/git-pack-refs.html index d403b92..851b6de 100644 --- a/git-pack-refs.html +++ b/git-pack-refs.html 
@@ -860,7 +860,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-14 05:57:42 JST  + 2023-06-13 13:57:42 PDT   </div>   </div>   </body>  
diff --git a/git-patch-id.html b/git-patch-id.html index 47b0089..2ce031a 100644 --- a/git-patch-id.html +++ b/git-patch-id.html 
@@ -855,7 +855,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-11-05 13:49:36 JST  + 2022-11-04 21:49:36 PDT   </div>   </div>   </body>  
diff --git a/git-prune-packed.html b/git-prune-packed.html index eca33d4..3726c82 100644 --- a/git-prune-packed.html +++ b/git-prune-packed.html 
@@ -814,7 +814,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-prune.html b/git-prune.html index 81142d2..cdc99c6 100644 --- a/git-prune.html +++ b/git-prune.html 
@@ -884,7 +884,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-pull.html b/git-pull.html index 5e8b36c..c32ec00 100644 --- a/git-pull.html +++ b/git-pull.html 
@@ -2314,7 +2314,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-10-19 09:00:13 JST  + 2021-10-18 17:00:13 PDT   </div>   </div>   </body>  
diff --git a/git-push.html b/git-push.html index fa0be5f..1aeffea 100644 --- a/git-push.html +++ b/git-push.html 
@@ -2181,7 +2181,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/git-quiltimport.html b/git-quiltimport.html index 0b629e6..ea022dc 100644 --- a/git-quiltimport.html +++ b/git-quiltimport.html 
@@ -841,7 +841,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-range-diff.html b/git-range-diff.html index 2a75d03..47321c9 100644 --- a/git-range-diff.html +++ b/git-range-diff.html 
@@ -1085,7 +1085,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/git-read-tree.html b/git-read-tree.html index 1bbe705..1968d7e 100644 --- a/git-read-tree.html +++ b/git-read-tree.html 
@@ -1294,7 +1294,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-rebase.html b/git-rebase.html index a3a44f0..dc91f9f 100644 --- a/git-rebase.html +++ b/git-rebase.html 
@@ -1545,21 +1545,25 @@  </dt>   <dd>   <p>  - When the commit log message begins with "squash! &#8230;" or "fixup! &#8230;"  - or "amend! &#8230;", and there is already a commit in the todo list that  - matches the same <code>...</code>, automatically modify the todo list of  - <code>rebase -i</code>, so that the commit marked for squashing comes right after  - the commit to be modified, and change the action of the moved commit  - from <code>pick</code> to <code>squash</code> or <code>fixup</code> or <code>fixup -C</code> respectively. A commit  - matches the <code>...</code> if the commit subject matches, or if the <code>...</code> refers  - to the commit&#8217;s hash. As a fall-back, partial matches of the commit  - subject work, too. The recommended way to create fixup/amend/squash  - commits is by using the <code>--fixup</code>, <code>--fixup=amend:</code> or <code>--fixup=reword:</code>  - and <code>--squash</code> options respectively of <a href="git-commit.html">git-commit(1)</a>.  + Automatically squash commits with specially formatted messages into  + previous commits being rebased. If a commit message starts with  + "squash! ", "fixup! " or "amend! ", the remainder of the subject line  + is taken as a commit specifier, which matches a previous commit if it  + matches the subject line or the hash of that commit. If no commit  + matches fully, matches of the specifier with the start of commit  + subjects are considered.   </p>  -<div class="paragraph"><p>If the <code>--autosquash</code> option is enabled by default using the  -configuration variable <code>rebase.autoSquash</code>, this option can be  -used to override and disable this setting.</p></div>  +<div class="paragraph"><p>In the rebase todo list, the actions of squash, fixup and amend commits are  +changed from <code>pick</code> to <code>squash</code>, <code>fixup</code> or <code>fixup -C</code>, respectively, and they  +are moved right after the commit they modify. The <code>--interactive</code> option can  +be used to review and edit the todo list before proceeding.</p></div>  +<div class="paragraph"><p>The recommended way to create commits with squash markers is by using the  +<code>--squash</code>, <code>--fixup</code>, <code>--fixup=amend:</code> or <code>--fixup=reword:</code> options of  +<a href="git-commit.html">git-commit(1)</a>, which take the target commit as an argument and  +automatically fill in the subject line of the new commit from that.</p></div>  +<div class="paragraph"><p>Settting configuration variable <code>rebase.autoSquash</code> to true enables  +auto-squashing by default for interactive rebase. The <code>--no-autosquash</code>  +option can be used to override that setting.</p></div>   <div class="paragraph"><p>See also INCOMPATIBLE OPTIONS below.</p></div>   </dd>   <dt class="hdlist1">  @@ -2659,7 +2663,9 @@  </dt>   <dd>   <p>  - If set to true enable <code>--autosquash</code> option by default.  + If set to true, enable the <code>--autosquash</code> option of  + <a href="git-rebase.html">git-rebase(1)</a> by default for interactive mode.  + This can be overridden with the <code>--no-autosquash</code> option.   </p>   </dd>   <dt class="hdlist1">  @@ -2803,7 +2809,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-07 12:13:08 JST  + 2023-12-09 17:40:53 PST   </div>   </div>   </body>  
diff --git a/git-rebase.txt b/git-rebase.txt index b4526ca..1dd6555 100644 --- a/git-rebase.txt +++ b/git-rebase.txt 
@@ -589,21 +589,27 @@    --autosquash::  --no-autosquash:: -	When the commit log message begins with "squash! ..." or "fixup! ..." -	or "amend! ...", and there is already a commit in the todo list that -	matches the same `...`, automatically modify the todo list of -	`rebase -i`, so that the commit marked for squashing comes right after -	the commit to be modified, and change the action of the moved commit -	from `pick` to `squash` or `fixup` or `fixup -C` respectively. A commit -	matches the `...` if the commit subject matches, or if the `...` refers -	to the commit's hash. As a fall-back, partial matches of the commit -	subject work, too. The recommended way to create fixup/amend/squash -	commits is by using the `--fixup`, `--fixup=amend:` or `--fixup=reword:` -	and `--squash` options respectively of linkgit:git-commit[1]. +	Automatically squash commits with specially formatted messages into +	previous commits being rebased. If a commit message starts with +	"squash! ", "fixup! " or "amend! ", the remainder of the subject line +	is taken as a commit specifier, which matches a previous commit if it +	matches the subject line or the hash of that commit. If no commit +	matches fully, matches of the specifier with the start of commit +	subjects are considered.  + -If the `--autosquash` option is enabled by default using the -configuration variable `rebase.autoSquash`, this option can be -used to override and disable this setting. +In the rebase todo list, the actions of squash, fixup and amend commits are +changed from `pick` to `squash`, `fixup` or `fixup -C`, respectively, and they +are moved right after the commit they modify. The `--interactive` option can +be used to review and edit the todo list before proceeding. ++ +The recommended way to create commits with squash markers is by using the +`--squash`, `--fixup`, `--fixup=amend:` or `--fixup=reword:` options of +linkgit:git-commit[1], which take the target commit as an argument and +automatically fill in the subject line of the new commit from that. ++ +Settting configuration variable `rebase.autoSquash` to true enables +auto-squashing by default for interactive rebase. The `--no-autosquash` +option can be used to override that setting.  +  See also INCOMPATIBLE OPTIONS below.   
diff --git a/git-receive-pack.html b/git-receive-pack.html index 6962011..25bc415 100644 --- a/git-receive-pack.html +++ b/git-receive-pack.html 
@@ -1094,7 +1094,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-reflog.html b/git-reflog.html index 82cafdf..a6265b2 100644 --- a/git-reflog.html +++ b/git-reflog.html 
@@ -925,7 +925,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-remote-ext.html b/git-remote-ext.html index ad6862a..7c6850d 100644 --- a/git-remote-ext.html +++ b/git-remote-ext.html 
@@ -963,7 +963,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-remote-fd.html b/git-remote-fd.html index e95aa67..3bfe8ec 100644 --- a/git-remote-fd.html +++ b/git-remote-fd.html 
@@ -843,7 +843,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-remote-helpers.html b/git-remote-helpers.html index bb94308..4ee3017 100644 --- a/git-remote-helpers.html +++ b/git-remote-helpers.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>git-remote-helpers</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -751,7 +751,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-remote.html b/git-remote.html index dc22f9c..9f04749 100644 --- a/git-remote.html +++ b/git-remote.html 
@@ -1057,7 +1057,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-05-27 08:11:01 JST  + 2022-05-26 16:11:01 PDT   </div>   </div>   </body>  
diff --git a/git-repack.html b/git-repack.html index 6f3f08b..ff848c3 100644 --- a/git-repack.html +++ b/git-repack.html 
@@ -1169,7 +1169,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/git-replace.html b/git-replace.html index e4a5389..a61a626 100644 --- a/git-replace.html +++ b/git-replace.html 
@@ -971,7 +971,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-request-pull.html b/git-request-pull.html index 7b116a7..058ee0c 100644 --- a/git-request-pull.html +++ b/git-request-pull.html 
@@ -855,7 +855,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-rerere.html b/git-rerere.html index bd49b47..3355158 100644 --- a/git-rerere.html +++ b/git-rerere.html 
@@ -990,7 +990,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-reset.html b/git-reset.html index fb99c42..0dfcc35 100644 --- a/git-reset.html +++ b/git-reset.html 
@@ -1507,7 +1507,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-01-22 10:52:14 JST  + 2023-01-21 17:52:14 PST   </div>   </div>   </body>  
diff --git a/git-restore.html b/git-restore.html index b9ef32f..04efbff 100644 --- a/git-restore.html +++ b/git-restore.html 
@@ -1077,7 +1077,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-rev-list.html b/git-rev-list.html index 51789a4..6d5a953 100644 --- a/git-rev-list.html +++ b/git-rev-list.html 
@@ -3770,7 +3770,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-rev-parse.html b/git-rev-parse.html index 6aca716..01238dc 100644 --- a/git-rev-parse.html +++ b/git-rev-parse.html 
@@ -2151,7 +2151,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-revert.html b/git-revert.html index 842cfa2..ad8b3d8 100644 --- a/git-revert.html +++ b/git-revert.html 
@@ -1070,7 +1070,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-09-15 03:18:26 JST  + 2023-09-14 11:18:26 PDT   </div>   </div>   </body>  
diff --git a/git-rm.html b/git-rm.html index 6b07f86..ac15f87 100644 --- a/git-rm.html +++ b/git-rm.html 
@@ -1033,7 +1033,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-send-email.html b/git-send-email.html index 05ab8cc..c32eabb 100644 --- a/git-send-email.html +++ b/git-send-email.html 
@@ -1834,7 +1834,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/git-send-pack.html b/git-send-pack.html index e220938..7fe9e63 100644 --- a/git-send-pack.html +++ b/git-send-pack.html 
@@ -994,7 +994,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-sh-i18n--envsubst.html b/git-sh-i18n--envsubst.html index a5b9dc0..1aefa50 100644 --- a/git-sh-i18n--envsubst.html +++ b/git-sh-i18n--envsubst.html 
@@ -785,7 +785,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-sh-i18n.html b/git-sh-i18n.html index 80a63de..b66da6e 100644 --- a/git-sh-i18n.html +++ b/git-sh-i18n.html 
@@ -807,7 +807,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-sh-setup.html b/git-sh-setup.html index 4d5cb1d..5ebb9ea 100644 --- a/git-sh-setup.html +++ b/git-sh-setup.html 
@@ -902,7 +902,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-shell.html b/git-shell.html index 675ea2d..8f46133 100644 --- a/git-shell.html +++ b/git-shell.html 
@@ -873,7 +873,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-shortlog.html b/git-shortlog.html index 1ac89a3..d3d2b14 100644 --- a/git-shortlog.html +++ b/git-shortlog.html 
@@ -2037,7 +2037,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-11-05 13:49:36 JST  + 2022-11-04 21:49:36 PDT   </div>   </div>   </body>  
diff --git a/git-show-branch.html b/git-show-branch.html index a9fdaae..d25943d 100644 --- a/git-show-branch.html +++ b/git-show-branch.html 
@@ -1065,7 +1065,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-show-index.html b/git-show-index.html index 6e2f2fc..4e2a48c 100644 --- a/git-show-index.html +++ b/git-show-index.html 
@@ -826,7 +826,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-26 02:44:55 JST  + 2020-08-25 10:44:55 PDT   </div>   </div>   </body>  
diff --git a/git-show-ref.html b/git-show-ref.html index d66f9c5..2fac233 100644 --- a/git-show-ref.html +++ b/git-show-ref.html 
@@ -1004,7 +1004,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-09 02:04:31 JST  + 2023-11-08 09:04:31 PST   </div>   </div>   </body>  
diff --git a/git-show.html b/git-show.html index 80b3fd1..3c83e4a 100644 --- a/git-show.html +++ b/git-show.html 
@@ -3829,7 +3829,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-sparse-checkout.html b/git-sparse-checkout.html index d8e1c57..56f600c 100644 --- a/git-sparse-checkout.html +++ b/git-sparse-checkout.html 
@@ -1312,7 +1312,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-24 05:24:09 JST  + 2023-06-23 13:24:09 PDT   </div>   </div>   </body>  
diff --git a/git-stage.html b/git-stage.html index e401cd6..204ae39 100644 --- a/git-stage.html +++ b/git-stage.html 
@@ -772,7 +772,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-stash.html b/git-stash.html index bd4c538..226e7ac 100644 --- a/git-stash.html +++ b/git-stash.html 
@@ -1327,7 +1327,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-24 05:24:09 JST  + 2023-06-23 13:24:09 PDT   </div>   </div>   </body>  
diff --git a/git-status.html b/git-status.html index eec1c14..829aa59 100644 --- a/git-status.html +++ b/git-status.html 
@@ -1464,7 +1464,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-stripspace.html b/git-stripspace.html index 1d2eedc..5a54c83 100644 --- a/git-stripspace.html +++ b/git-stripspace.html 
@@ -876,7 +876,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-submodule.html b/git-submodule.html index 460a204..5ca592e 100644 --- a/git-submodule.html +++ b/git-submodule.html 
@@ -1416,7 +1416,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-08-05 04:03:14 JST  + 2023-08-04 12:03:14 PDT   </div>   </div>   </body>  
diff --git a/git-svn.html b/git-svn.html index b52b294..26baae2 100644 --- a/git-svn.html +++ b/git-svn.html 
@@ -2514,7 +2514,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-switch.html b/git-switch.html index 94213c6..1f9277f 100644 --- a/git-switch.html +++ b/git-switch.html 
@@ -1199,7 +1199,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-15 05:23:11 JST  + 2022-09-14 13:23:11 PDT   </div>   </div>   </body>  
diff --git a/git-symbolic-ref.html b/git-symbolic-ref.html index a0aae08..0e25587 100644 --- a/git-symbolic-ref.html +++ b/git-symbolic-ref.html 
@@ -863,7 +863,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-tag.html b/git-tag.html index 7e260c5..59571e6 100644 --- a/git-tag.html +++ b/git-tag.html 
@@ -1367,7 +1367,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-06-14 05:57:42 JST  + 2023-06-13 13:57:42 PDT   </div>   </div>   </body>  
diff --git a/git-unpack-file.html b/git-unpack-file.html index 601312a..4e058a9 100644 --- a/git-unpack-file.html +++ b/git-unpack-file.html 
@@ -788,7 +788,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-unpack-objects.html b/git-unpack-objects.html index c96452f..da0e9a9 100644 --- a/git-unpack-objects.html +++ b/git-unpack-objects.html 
@@ -830,7 +830,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git-update-index.html b/git-update-index.html index 7f04846..07d2ca9 100644 --- a/git-update-index.html +++ b/git-update-index.html 
@@ -1557,7 +1557,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-update-ref.html b/git-update-ref.html index 861fbc6..6a2c094 100644 --- a/git-update-ref.html +++ b/git-update-ref.html 
@@ -974,7 +974,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-update-server-info.html b/git-update-server-info.html index d1ba953..b3675cc 100644 --- a/git-update-server-info.html +++ b/git-update-server-info.html 
@@ -813,7 +813,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-upload-archive.html b/git-upload-archive.html index 7240ffb..c60273b 100644 --- a/git-upload-archive.html +++ b/git-upload-archive.html 
@@ -832,7 +832,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-upload-pack.html b/git-upload-pack.html index b421c6f..9a9a704 100644 --- a/git-upload-pack.html +++ b/git-upload-pack.html 
@@ -854,7 +854,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-var.html b/git-var.html index 13964d1..4d49b2a 100644 --- a/git-var.html +++ b/git-var.html 
@@ -924,7 +924,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-verify-commit.html b/git-verify-commit.html index 6f5ace1..5d96af4 100644 --- a/git-verify-commit.html +++ b/git-verify-commit.html 
@@ -806,7 +806,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-verify-pack.html b/git-verify-pack.html index 2ef00f8..3230d9f 100644 --- a/git-verify-pack.html +++ b/git-verify-pack.html 
@@ -836,7 +836,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-verify-tag.html b/git-verify-tag.html index c7985cc..3e1786e 100644 --- a/git-verify-tag.html +++ b/git-verify-tag.html 
@@ -806,7 +806,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-10-29 03:53:56 JST  + 2022-10-28 11:53:56 PDT   </div>   </div>   </body>  
diff --git a/git-version.html b/git-version.html index f0cd995..689a0e3 100644 --- a/git-version.html +++ b/git-version.html 
@@ -789,7 +789,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-09-24 06:33:59 JST  + 2021-09-23 14:33:59 PDT   </div>   </div>   </body>  
diff --git a/git-web--browse.html b/git-web--browse.html index 35c3a91..60e675a 100644 --- a/git-web--browse.html +++ b/git-web--browse.html 
@@ -964,7 +964,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/git-whatchanged.html b/git-whatchanged.html index 6a681b5..e1280a3 100644 --- a/git-whatchanged.html +++ b/git-whatchanged.html 
@@ -803,7 +803,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/git-worktree.html b/git-worktree.html index 0f02f59..8eb6c94 100644 --- a/git-worktree.html +++ b/git-worktree.html 
@@ -1399,7 +1399,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-21 08:56:50 JST  + 2023-10-20 16:56:50 PDT   </div>   </div>   </body>  
diff --git a/git-write-tree.html b/git-write-tree.html index cd1d449..49ed13f 100644 --- a/git-write-tree.html +++ b/git-write-tree.html 
@@ -805,7 +805,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/git.html b/git.html index 2d01f05..07f4de5 100644 --- a/git.html +++ b/git.html 
@@ -3828,7 +3828,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-09 02:04:31 JST  + 2023-11-08 09:04:31 PST   </div>   </div>   </body>  
diff --git a/gitattributes.html b/gitattributes.html index e01ee4c..848f4fa 100644 --- a/gitattributes.html +++ b/gitattributes.html 
@@ -2246,7 +2246,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/gitcli.html b/gitcli.html index 0b4d92d..4ed8ec2 100644 --- a/gitcli.html +++ b/gitcli.html 
@@ -1052,7 +1052,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitcore-tutorial.html b/gitcore-tutorial.html index 1f2c8b2..8821f1d 100644 --- a/gitcore-tutorial.html +++ b/gitcore-tutorial.html 
@@ -2458,7 +2458,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/gitcredentials.html b/gitcredentials.html index b79e4c2..a05dc5b 100644 --- a/gitcredentials.html +++ b/gitcredentials.html 
@@ -1122,7 +1122,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-07-19 00:52:58 JST  + 2023-07-18 08:52:58 PDT   </div>   </div>   </body>  
diff --git a/gitcvs-migration.html b/gitcvs-migration.html index a4dbd62..2018d1a 100644 --- a/gitcvs-migration.html +++ b/gitcvs-migration.html 
@@ -957,7 +957,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/gitdiffcore.html b/gitdiffcore.html index 9e44a45..b29f333 100644 --- a/gitdiffcore.html +++ b/gitdiffcore.html 
@@ -1108,7 +1108,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/giteveryday.html b/giteveryday.html index 68388d9..4507ec4 100644 --- a/giteveryday.html +++ b/giteveryday.html 
@@ -1546,7 +1546,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/gitfaq.html b/gitfaq.html index 70aba08..3ca5875 100644 --- a/gitfaq.html +++ b/gitfaq.html 
@@ -1262,7 +1262,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-09-02 08:44:20 JST  + 2021-09-01 16:44:20 PDT   </div>   </div>   </body>  
diff --git a/gitformat-bundle.html b/gitformat-bundle.html index a962c88..10befb2 100644 --- a/gitformat-bundle.html +++ b/gitformat-bundle.html 
@@ -879,7 +879,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitformat-chunk.html b/gitformat-chunk.html index 2a08dad..99740ce 100644 --- a/gitformat-chunk.html +++ b/gitformat-chunk.html 
@@ -888,7 +888,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitformat-commit-graph.html b/gitformat-commit-graph.html index 48084b5..feaa323 100644 --- a/gitformat-commit-graph.html +++ b/gitformat-commit-graph.html 
@@ -1076,7 +1076,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-11-12 16:55:30 JST  + 2022-11-11 23:55:30 PST   </div>   </div>   </body>  
diff --git a/gitformat-index.html b/gitformat-index.html index 204dd3e..940ea0c 100644 --- a/gitformat-index.html +++ b/gitformat-index.html 
@@ -1493,7 +1493,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-02-10 09:57:15 JST  + 2023-02-09 16:57:15 PST   </div>   </div>   </body>  
diff --git a/gitformat-pack.html b/gitformat-pack.html index 3f30309..0ec60b5 100644 --- a/gitformat-pack.html +++ b/gitformat-pack.html 
@@ -1553,7 +1553,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-09 02:04:31 JST  + 2023-11-08 09:04:31 PST   </div>   </div>   </body>  
diff --git a/gitformat-signature.html b/gitformat-signature.html index 90266d4..da48c3b 100644 --- a/gitformat-signature.html +++ b/gitformat-signature.html 
@@ -1064,7 +1064,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-03-07 15:13:04 JST  + 2023-03-06 22:13:04 PST   </div>   </div>   </body>  
diff --git a/gitglossary.html b/gitglossary.html index edda6d9..39a2fdd 100644 --- a/gitglossary.html +++ b/gitglossary.html 
@@ -2001,7 +2001,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/githooks.html b/githooks.html index 9ec0b20..6d1777d 100644 --- a/githooks.html +++ b/githooks.html 
@@ -1442,7 +1442,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitignore.html b/gitignore.html index 4a72a80..4203ade 100644 --- a/gitignore.html +++ b/gitignore.html 
@@ -1073,7 +1073,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-07-28 07:46:24 JST  + 2023-07-27 15:46:24 PDT   </div>   </div>   </body>  
diff --git a/gitk.html b/gitk.html index a2eabfc..a60354d 100644 --- a/gitk.html +++ b/gitk.html 
@@ -1101,7 +1101,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-30 08:42:00 JST  + 2023-10-29 16:42:00 PDT   </div>   </div>   </body>  
diff --git a/gitmailmap.html b/gitmailmap.html index 21e0421..0e09518 100644 --- a/gitmailmap.html +++ b/gitmailmap.html 
@@ -892,7 +892,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-05-13 14:11:31 JST  + 2021-05-12 22:11:31 PDT   </div>   </div>   </body>  
diff --git a/gitmodules.html b/gitmodules.html index 4206b68..a5fae00 100644 --- a/gitmodules.html +++ b/gitmodules.html 
@@ -948,7 +948,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-08-05 04:03:14 JST  + 2023-08-04 12:03:14 PDT   </div>   </div>   </body>  
diff --git a/gitnamespaces.html b/gitnamespaces.html index df10c21..5f21d87 100644 --- a/gitnamespaces.html +++ b/gitnamespaces.html 
@@ -850,7 +850,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-05-07 13:22:01 JST  + 2021-05-06 21:22:01 PDT   </div>   </div>   </body>  
diff --git a/gitprotocol-capabilities.html b/gitprotocol-capabilities.html index d28572d..3b4d5de 100644 --- a/gitprotocol-capabilities.html +++ b/gitprotocol-capabilities.html 
@@ -1154,7 +1154,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitprotocol-common.html b/gitprotocol-common.html index 7ab286d..90d5db1 100644 --- a/gitprotocol-common.html +++ b/gitprotocol-common.html 
@@ -889,7 +889,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitprotocol-http.html b/gitprotocol-http.html index bed4971..0285551 100644 --- a/gitprotocol-http.html +++ b/gitprotocol-http.html 
@@ -1279,7 +1279,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitprotocol-pack.html b/gitprotocol-pack.html index 72ebc41..dc70204 100644 --- a/gitprotocol-pack.html +++ b/gitprotocol-pack.html 
@@ -1494,7 +1494,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitprotocol-v2.html b/gitprotocol-v2.html index 69d06f3..7080f39 100644 --- a/gitprotocol-v2.html +++ b/gitprotocol-v2.html 
@@ -1719,7 +1719,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitremote-helpers.html b/gitremote-helpers.html index 5181b9d..57b2958 100644 --- a/gitremote-helpers.html +++ b/gitremote-helpers.html 
@@ -1537,7 +1537,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-02 05:55:22 JST  + 2022-09-01 13:55:22 PDT   </div>   </div>   </body>  
diff --git a/gitrepository-layout.html b/gitrepository-layout.html index 17b40f6..1fe3723 100644 --- a/gitrepository-layout.html +++ b/gitrepository-layout.html 
@@ -1372,7 +1372,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/gitrevisions.html b/gitrevisions.html index cc63fe3..764b805 100644 --- a/gitrevisions.html +++ b/gitrevisions.html 
@@ -1417,7 +1417,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/gitsubmodules.html b/gitsubmodules.html index 853f320..f125266 100644 --- a/gitsubmodules.html +++ b/gitsubmodules.html 
@@ -1113,7 +1113,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gittutorial-2.html b/gittutorial-2.html index 3f6717b..4be9cc5 100644 --- a/gittutorial-2.html +++ b/gittutorial-2.html 
@@ -1171,7 +1171,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/gittutorial.html b/gittutorial.html index 3eadf05..78b57f9 100644 --- a/gittutorial.html +++ b/gittutorial.html 
@@ -1374,7 +1374,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-19 05:44:22 JST  + 2023-10-18 13:44:22 PDT   </div>   </div>   </body>  
diff --git a/gitweb.conf.html b/gitweb.conf.html index cb5bd4f..9369a34 100644 --- a/gitweb.conf.html +++ b/gitweb.conf.html 
@@ -2015,7 +2015,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitweb.html b/gitweb.html index 044ac94..d9c01c7 100644 --- a/gitweb.html +++ b/gitweb.html 
@@ -1642,7 +1642,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/gitworkflows.html b/gitworkflows.html index e68de91..4c63bc6 100644 --- a/gitworkflows.html +++ b/gitworkflows.html 
@@ -1225,7 +1225,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2021-12-11 07:52:02 JST  + 2021-12-10 14:52:02 PST   </div>   </div>   </body>  
diff --git a/howto/coordinate-embargoed-releases.html b/howto/coordinate-embargoed-releases.html index d573020..85f1a78 100644 --- a/howto/coordinate-embargoed-releases.html +++ b/howto/coordinate-embargoed-releases.html 
@@ -1038,7 +1038,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index e19d734..ed65dee 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Keep authoritative canonical history correct with git pull</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -939,7 +939,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index ec35401..7877539 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to maintain Git</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -1479,7 +1479,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/new-command.html b/howto/new-command.html index 9bafae8..84f8bbc 100644 --- a/howto/new-command.html +++ b/howto/new-command.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to integrate new subcommands</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -864,7 +864,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:05 JST  + 2023-12-09 17:41:24 PST   </div>   </div>   </body>  
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 35c41f9..318e7d2 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to rebase from an internal branch</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -896,7 +896,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index fc3ee9e..b4ac28e 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to rebuild from update hook</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -848,7 +848,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index c3c0eed..4b02780 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to recover a corrupted blob object</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -881,7 +881,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index 6a38ae4..2865908 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to recover an object from scratch</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1190,7 +1190,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:07 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 5e2e36e..3d5bc8a 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to revert a faulty merge</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1026,7 +1026,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:26 PST   </div>   </div>   </body>  
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index 62f7e16..b530fd2 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to revert an existing commit</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -908,7 +908,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:05 JST  + 2023-12-09 17:41:24 PST   </div>   </div>   </body>  
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index 5e88f25..f6fd68c 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to separate topic branches</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -842,7 +842,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:25 PST   </div>   </div>   </body>  
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index a29b677..5c4cd34 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to setup Git server over http</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1072,7 +1072,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:25 PST   </div>   </div>   </body>  
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index 898b005..a677b87 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to use the update hook</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -931,7 +931,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:25 PST   </div>   </div>   </body>  
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index 33bfe6c..bc92e56 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to use git-daemon</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -792,7 +792,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:25 PST   </div>   </div>   </body>  
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index 1c0a904..1098154 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to use the subtree merge strategy</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -849,7 +849,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:24 PST   </div>   </div>   </body>  
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index 1fb56b9..b5743ec 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>How to use a signed tag in pull requests</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -953,7 +953,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:06 JST  + 2023-12-09 17:41:25 PST   </div>   </div>   </body>  
diff --git a/scalar.html b/scalar.html index b39c140..36729ba 100644 --- a/scalar.html +++ b/scalar.html 
@@ -999,7 +999,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-08-30 06:18:03 JST  + 2023-08-29 14:18:03 PDT   </div>   </div>   </body>  
diff --git a/technical/api-error-handling.html b/technical/api-error-handling.html index 4a573f5..95f34ee 100644 --- a/technical/api-error-handling.html +++ b/technical/api-error-handling.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Error reporting in git</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -879,7 +879,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-22 07:44:34 JST  + 2022-09-21 15:44:34 PDT   </div>   </div>   </body>  
diff --git a/technical/api-index.html b/technical/api-index.html index 1c1267c..8ced060 100644 --- a/technical/api-index.html +++ b/technical/api-index.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Git API Documents</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -776,7 +776,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-11-21 01:57:10 JST  + 2023-11-20 08:57:10 PST   </div>   </div>   </body>  
diff --git a/technical/api-merge.html b/technical/api-merge.html index ed4d6e9..eb1fc76 100644 --- a/technical/api-merge.html +++ b/technical/api-merge.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>merge API</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -802,7 +802,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-07-01 04:48:29 JST  + 2023-06-30 12:48:29 PDT   </div>   </div>   </body>  
diff --git a/technical/api-parse-options.html b/technical/api-parse-options.html index 9a6dd43..c11b774 100644 --- a/technical/api-parse-options.html +++ b/technical/api-parse-options.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>parse-options API</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1352,7 +1352,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-22 07:44:34 JST  + 2022-09-21 15:44:34 PDT   </div>   </div>   </body>  
diff --git a/technical/api-simple-ipc.html b/technical/api-simple-ipc.html index abbb700..ffedaac 100644 --- a/technical/api-simple-ipc.html +++ b/technical/api-simple-ipc.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Simple-IPC API</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -841,7 +841,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/technical/api-trace2.html b/technical/api-trace2.html index 9b09520..aa75112 100644 --- a/technical/api-trace2.html +++ b/technical/api-trace2.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Trace2 API</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -2355,7 +2355,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-11-05 13:49:36 JST  + 2022-11-04 21:49:36 PDT   </div>   </div>   </body>  
diff --git a/technical/bitmap-format.html b/technical/bitmap-format.html index d3a4618..56ef54f 100644 --- a/technical/bitmap-format.html +++ b/technical/bitmap-format.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>GIT bitmap v1 format</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -1209,7 +1209,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/technical/bundle-uri.html b/technical/bundle-uri.html index 7968042..db8d5f1 100644 --- a/technical/bundle-uri.html +++ b/technical/bundle-uri.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Bundle URIs</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1464,7 +1464,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-02-23 08:29:29 JST  + 2023-02-22 15:29:29 PST   </div>   </div>   </body>  
diff --git a/technical/hash-function-transition.html b/technical/hash-function-transition.html index 3246fe9..1c1541a 100644 --- a/technical/hash-function-transition.html +++ b/technical/hash-function-transition.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Git hash function transition</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -2088,7 +2088,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-01-31 07:44:53 JST  + 2023-01-30 14:44:53 PST   </div>   </div>   </body>  
diff --git a/technical/long-running-process-protocol.html b/technical/long-running-process-protocol.html index 7529f95..dc77d36 100644 --- a/technical/long-running-process-protocol.html +++ b/technical/long-running-process-protocol.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Long-running process protocol</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -796,7 +796,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-08-19 06:11:07 JST  + 2022-08-18 14:11:07 PDT   </div>   </div>   </body>  
diff --git a/technical/multi-pack-index.html b/technical/multi-pack-index.html index 05b75b8..66e4c80 100644 --- a/technical/multi-pack-index.html +++ b/technical/multi-pack-index.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Multi-Pack-Index (MIDX) Design Notes</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -913,7 +913,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-02-17 10:29:08 JST  + 2022-02-16 17:29:08 PST   </div>   </div>   </body>  
diff --git a/technical/pack-heuristics.html b/technical/pack-heuristics.html index c1abfab..8a19c96 100644 --- a/technical/pack-heuristics.html +++ b/technical/pack-heuristics.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Concerning Git&#8217;s Packing Heuristics</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1344,7 +1344,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/technical/parallel-checkout.html b/technical/parallel-checkout.html index 564e4fe..8c84be7 100644 --- a/technical/parallel-checkout.html +++ b/technical/parallel-checkout.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Parallel Checkout Design Notes</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1076,7 +1076,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/technical/partial-clone.html b/technical/partial-clone.html index 22b779b..39dc073 100644 --- a/technical/partial-clone.html +++ b/technical/partial-clone.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Partial Clone Design Notes</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -1214,7 +1214,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/technical/racy-git.html b/technical/racy-git.html index 88ffb00..ca4b7a0 100644 --- a/technical/racy-git.html +++ b/technical/racy-git.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Use of index and Racy Git problem</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -953,7 +953,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/technical/reftable.html b/technical/reftable.html index 0b6e631..d226a68 100644 --- a/technical/reftable.html +++ b/technical/reftable.html 
@@ -2056,7 +2056,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2023-10-24 06:43:46 JST  + 2023-10-23 14:43:46 PDT   </div>   </div>   </body>  
diff --git a/technical/scalar.html b/technical/scalar.html index 8a4c610..0bd4bb2 100644 --- a/technical/scalar.html +++ b/technical/scalar.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Scalar</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -834,7 +834,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2022-09-20 07:03:44 JST  + 2022-09-19 15:03:44 PDT   </div>   </div>   </body>  
diff --git a/technical/send-pack-pipeline.html b/technical/send-pack-pipeline.html index 63b7528..d4bb0d6 100644 --- a/technical/send-pack-pipeline.html +++ b/technical/send-pack-pipeline.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Git-send-pack internals</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div class="sect1">  @@ -828,7 +828,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/technical/shallow.html b/technical/shallow.html index 9de5814..7e79cf3 100644 --- a/technical/shallow.html +++ b/technical/shallow.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Shallow commits</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -814,7 +814,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-08-20 14:10:31 JST  + 2020-08-19 22:10:31 PDT   </div>   </div>   </body>  
diff --git a/technical/trivial-merge.html b/technical/trivial-merge.html index 402496a..657ca44 100644 --- a/technical/trivial-merge.html +++ b/technical/trivial-merge.html 
@@ -735,7 +735,7 @@  <body class="article">   <div id="header">   <h1>Trivial merge rules</h1>  -<span id="revdate">2023-11-20</span>  +<span id="revdate">2023-12-09</span>   </div>   <div id="content">   <div id="preamble">  @@ -857,7 +857,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2020-03-11 07:02:33 JST  + 2020-03-10 15:02:33 PDT   </div>   </div>   </body>  
diff --git a/technical/unit-tests.html b/technical/unit-tests.html new file mode 100644 index 0000000..45a9cd4 --- /dev/null +++ b/technical/unit-tests.html 
@@ -0,0 +1,1216 @@ +<?xml version="1.0" encoding="UTF-8"?>  +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  +<head>  +<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />  +<meta name="generator" content="AsciiDoc 10.2.0" />  +<title>Unit Testing</title>  +<style type="text/css">  +/* Shared CSS for AsciiDoc xhtml11 and html5 backends */  +  +/* Default font. */  +body {  + font-family: Georgia,serif;  +}  +  +/* Title font. */  +h1, h2, h3, h4, h5, h6,  +div.title, caption.title,  +thead, p.table.header,  +#toctitle,  +#author, #revnumber, #revdate, #revremark,  +#footer {  + font-family: Arial,Helvetica,sans-serif;  +}  +  +body {  + margin: 1em 5% 1em 5%;  +}  +  +a {  + color: blue;  + text-decoration: underline;  +}  +a:visited {  + color: fuchsia;  +}  +  +em {  + font-style: italic;  + color: navy;  +}  +  +strong {  + font-weight: bold;  + color: #083194;  +}  +  +h1, h2, h3, h4, h5, h6 {  + color: #527bbd;  + margin-top: 1.2em;  + margin-bottom: 0.5em;  + line-height: 1.3;  +}  +  +h1, h2, h3 {  + border-bottom: 2px solid silver;  +}  +h2 {  + padding-top: 0.5em;  +}  +h3 {  + float: left;  +}  +h3 + * {  + clear: left;  +}  +h5 {  + font-size: 1.0em;  +}  +  +div.sectionbody {  + margin-left: 0;  +}  +  +hr {  + border: 1px solid silver;  +}  +  +p {  + margin-top: 0.5em;  + margin-bottom: 0.5em;  +}  +  +ul, ol, li > p {  + margin-top: 0;  +}  +ul > li { color: #aaa; }  +ul > li > * { color: black; }  +  +.monospaced, code, pre {  + font-family: "Courier New", Courier, monospace;  + font-size: inherit;  + color: navy;  + padding: 0;  + margin: 0;  +}  +pre {  + white-space: pre-wrap;  +}  +  +#author {  + color: #527bbd;  + font-weight: bold;  + font-size: 1.1em;  +}  +#email {  +}  +#revnumber, #revdate, #revremark {  +}  +  +#footer {  + font-size: small;  + border-top: 2px solid silver;  + padding-top: 0.5em;  + margin-top: 4.0em;  +}  +#footer-text {  + float: left;  + padding-bottom: 0.5em;  +}  +#footer-badges {  + float: right;  + padding-bottom: 0.5em;  +}  +  +#preamble {  + margin-top: 1.5em;  + margin-bottom: 1.5em;  +}  +div.imageblock, div.exampleblock, div.verseblock,  +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,  +div.admonitionblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +div.admonitionblock {  + margin-top: 2.0em;  + margin-bottom: 2.0em;  + margin-right: 10%;  + color: #606060;  +}  +  +div.content { /* Block element content. */  + padding: 0;  +}  +  +/* Block element titles. */  +div.title, caption.title {  + color: #527bbd;  + font-weight: bold;  + text-align: left;  + margin-top: 1.0em;  + margin-bottom: 0.5em;  +}  +div.title + * {  + margin-top: 0;  +}  +  +td div.title:first-child {  + margin-top: 0.0em;  +}  +div.content div.title:first-child {  + margin-top: 0.0em;  +}  +div.content + div.title {  + margin-top: 0.0em;  +}  +  +div.sidebarblock > div.content {  + background: #ffffee;  + border: 1px solid #dddddd;  + border-left: 4px solid #f0f0f0;  + padding: 0.5em;  +}  +  +div.listingblock > div.content {  + border: 1px solid #dddddd;  + border-left: 5px solid #f0f0f0;  + background: #f8f8f8;  + padding: 0.5em;  +}  +  +div.quoteblock, div.verseblock {  + padding-left: 1.0em;  + margin-left: 1.0em;  + margin-right: 10%;  + border-left: 5px solid #f0f0f0;  + color: #888;  +}  +  +div.quoteblock > div.attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock > pre.content {  + font-family: inherit;  + font-size: inherit;  +}  +div.verseblock > div.attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */  +div.verseblock + div.attribution {  + text-align: left;  +}  +  +div.admonitionblock .icon {  + vertical-align: top;  + font-size: 1.1em;  + font-weight: bold;  + text-decoration: underline;  + color: #527bbd;  + padding-right: 0.5em;  +}  +div.admonitionblock td.content {  + padding-left: 0.5em;  + border-left: 3px solid #dddddd;  +}  +  +div.exampleblock > div.content {  + border-left: 3px solid #dddddd;  + padding-left: 0.5em;  +}  +  +div.imageblock div.content { padding-left: 0; }  +span.image img { border-style: none; vertical-align: text-bottom; }  +a.image:visited { color: white; }  +  +dl {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +dt {  + margin-top: 0.5em;  + margin-bottom: 0;  + font-style: normal;  + color: navy;  +}  +dd > *:first-child {  + margin-top: 0.1em;  +}  +  +ul, ol {  + list-style-position: outside;  +}  +ol.arabic {  + list-style-type: decimal;  +}  +ol.loweralpha {  + list-style-type: lower-alpha;  +}  +ol.upperalpha {  + list-style-type: upper-alpha;  +}  +ol.lowerroman {  + list-style-type: lower-roman;  +}  +ol.upperroman {  + list-style-type: upper-roman;  +}  +  +div.compact ul, div.compact ol,  +div.compact p, div.compact p,  +div.compact div, div.compact div {  + margin-top: 0.1em;  + margin-bottom: 0.1em;  +}  +  +tfoot {  + font-weight: bold;  +}  +td > div.verse {  + white-space: pre;  +}  +  +div.hdlist {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +div.hdlist tr {  + padding-bottom: 15px;  +}  +dt.hdlist1.strong, td.hdlist1.strong {  + font-weight: bold;  +}  +td.hdlist1 {  + vertical-align: top;  + font-style: normal;  + padding-right: 0.8em;  + color: navy;  +}  +td.hdlist2 {  + vertical-align: top;  +}  +div.hdlist.compact tr {  + margin: 0;  + padding-bottom: 0;  +}  +  +.comment {  + background: yellow;  +}  +  +.footnote, .footnoteref {  + font-size: 0.8em;  +}  +  +span.footnote, span.footnoteref {  + vertical-align: super;  +}  +  +#footnotes {  + margin: 20px 0 20px 0;  + padding: 7px 0 0 0;  +}  +  +#footnotes div.footnote {  + margin: 0 0 5px 0;  +}  +  +#footnotes hr {  + border: none;  + border-top: 1px solid silver;  + height: 1px;  + text-align: left;  + margin-left: 0;  + width: 20%;  + min-width: 100px;  +}  +  +div.colist td {  + padding-right: 0.5em;  + padding-bottom: 0.3em;  + vertical-align: top;  +}  +div.colist td img {  + margin-top: 0.3em;  +}  +  +@media print {  + #footer-badges { display: none; }  +}  +  +#toc {  + margin-bottom: 2.5em;  +}  +  +#toctitle {  + color: #527bbd;  + font-size: 1.1em;  + font-weight: bold;  + margin-top: 1.0em;  + margin-bottom: 0.1em;  +}  +  +div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {  + margin-top: 0;  + margin-bottom: 0;  +}  +div.toclevel2 {  + margin-left: 2em;  + font-size: 0.9em;  +}  +div.toclevel3 {  + margin-left: 4em;  + font-size: 0.9em;  +}  +div.toclevel4 {  + margin-left: 6em;  + font-size: 0.9em;  +}  +  +span.aqua { color: aqua; }  +span.black { color: black; }  +span.blue { color: blue; }  +span.fuchsia { color: fuchsia; }  +span.gray { color: gray; }  +span.green { color: green; }  +span.lime { color: lime; }  +span.maroon { color: maroon; }  +span.navy { color: navy; }  +span.olive { color: olive; }  +span.purple { color: purple; }  +span.red { color: red; }  +span.silver { color: silver; }  +span.teal { color: teal; }  +span.white { color: white; }  +span.yellow { color: yellow; }  +  +span.aqua-background { background: aqua; }  +span.black-background { background: black; }  +span.blue-background { background: blue; }  +span.fuchsia-background { background: fuchsia; }  +span.gray-background { background: gray; }  +span.green-background { background: green; }  +span.lime-background { background: lime; }  +span.maroon-background { background: maroon; }  +span.navy-background { background: navy; }  +span.olive-background { background: olive; }  +span.purple-background { background: purple; }  +span.red-background { background: red; }  +span.silver-background { background: silver; }  +span.teal-background { background: teal; }  +span.white-background { background: white; }  +span.yellow-background { background: yellow; }  +  +span.big { font-size: 2em; }  +span.small { font-size: 0.6em; }  +  +span.underline { text-decoration: underline; }  +span.overline { text-decoration: overline; }  +span.line-through { text-decoration: line-through; }  +  +div.unbreakable { page-break-inside: avoid; }  +  +  +/*  + * xhtml11 specific  + *  + * */  +  +div.tableblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +div.tableblock > table {  + border: 3px solid #527bbd;  +}  +thead, p.table.header {  + font-weight: bold;  + color: #527bbd;  +}  +p.table {  + margin-top: 0;  +}  +/* Because the table frame attribute is overridden by CSS in most browsers. */  +div.tableblock > table[frame="void"] {  + border-style: none;  +}  +div.tableblock > table[frame="hsides"] {  + border-left-style: none;  + border-right-style: none;  +}  +div.tableblock > table[frame="vsides"] {  + border-top-style: none;  + border-bottom-style: none;  +}  +  +  +/*  + * html5 specific  + *  + * */  +  +table.tableblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +thead, p.tableblock.header {  + font-weight: bold;  + color: #527bbd;  +}  +p.tableblock {  + margin-top: 0;  +}  +table.tableblock {  + border-width: 3px;  + border-spacing: 0px;  + border-style: solid;  + border-color: #527bbd;  + border-collapse: collapse;  +}  +th.tableblock, td.tableblock {  + border-width: 1px;  + padding: 4px;  + border-style: solid;  + border-color: #527bbd;  +}  +  +table.tableblock.frame-topbot {  + border-left-style: hidden;  + border-right-style: hidden;  +}  +table.tableblock.frame-sides {  + border-top-style: hidden;  + border-bottom-style: hidden;  +}  +table.tableblock.frame-none {  + border-style: hidden;  +}  +  +th.tableblock.halign-left, td.tableblock.halign-left {  + text-align: left;  +}  +th.tableblock.halign-center, td.tableblock.halign-center {  + text-align: center;  +}  +th.tableblock.halign-right, td.tableblock.halign-right {  + text-align: right;  +}  +  +th.tableblock.valign-top, td.tableblock.valign-top {  + vertical-align: top;  +}  +th.tableblock.valign-middle, td.tableblock.valign-middle {  + vertical-align: middle;  +}  +th.tableblock.valign-bottom, td.tableblock.valign-bottom {  + vertical-align: bottom;  +}  +  +  +/*  + * manpage specific  + *  + * */  +  +body.manpage h1 {  + padding-top: 0.5em;  + padding-bottom: 0.5em;  + border-top: 2px solid silver;  + border-bottom: 2px solid silver;  +}  +body.manpage h2 {  + border-style: none;  +}  +body.manpage div.sectionbody {  + margin-left: 3em;  +}  +  +@media print {  + body.manpage div#toc { display: none; }  +}  +  +  +</style>  +<script type="text/javascript">  +/*<![CDATA[*/  +var asciidoc = { // Namespace.  +  +/////////////////////////////////////////////////////////////////////  +// Table Of Contents generator  +/////////////////////////////////////////////////////////////////////  +  +/* Author: Mihai Bazon, September 2002  + * http://students.infoiasi.ro/~mishoo  + *  + * Table Of Content generator  + * Version: 0.4  + *  + * Feel free to use this script under the terms of the GNU General Public  + * License, as long as you do not remove or alter this notice.  + */  +  + /* modified by Troy D. Hanson, September 2006. License: GPL */  + /* modified by Stuart Rackham, 2006, 2009. License: GPL */  +  +// toclevels = 1..4.  +toc: function (toclevels) {  +  + function getText(el) {  + var text = "";  + for (var i = el.firstChild; i != null; i = i.nextSibling) {  + if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.  + text += i.data;  + else if (i.firstChild != null)  + text += getText(i);  + }  + return text;  + }  +  + function TocEntry(el, text, toclevel) {  + this.element = el;  + this.text = text;  + this.toclevel = toclevel;  + }  +  + function tocEntries(el, toclevels) {  + var result = new Array;  + var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');  + // Function that scans the DOM tree for header elements (the DOM2  + // nodeIterator API would be a better technique but not supported by all  + // browsers).  + var iterate = function (el) {  + for (var i = el.firstChild; i != null; i = i.nextSibling) {  + if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {  + var mo = re.exec(i.tagName);  + if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {  + result[result.length] = new TocEntry(i, getText(i), mo[1]-1);  + }  + iterate(i);  + }  + }  + }  + iterate(el);  + return result;  + }  +  + var toc = document.getElementById("toc");  + if (!toc) {  + return;  + }  +  + // Delete existing TOC entries in case we're reloading the TOC.  + var tocEntriesToRemove = [];  + var i;  + for (i = 0; i < toc.childNodes.length; i++) {  + var entry = toc.childNodes[i];  + if (entry.nodeName.toLowerCase() == 'div'  + && entry.getAttribute("class")  + && entry.getAttribute("class").match(/^toclevel/))  + tocEntriesToRemove.push(entry);  + }  + for (i = 0; i < tocEntriesToRemove.length; i++) {  + toc.removeChild(tocEntriesToRemove[i]);  + }  +  + // Rebuild TOC entries.  + var entries = tocEntries(document.getElementById("content"), toclevels);  + for (var i = 0; i < entries.length; ++i) {  + var entry = entries[i];  + if (entry.element.id == "")  + entry.element.id = "_toc_" + i;  + var a = document.createElement("a");  + a.href = "#" + entry.element.id;  + a.appendChild(document.createTextNode(entry.text));  + var div = document.createElement("div");  + div.appendChild(a);  + div.className = "toclevel" + entry.toclevel;  + toc.appendChild(div);  + }  + if (entries.length == 0)  + toc.parentNode.removeChild(toc);  +},  +  +  +/////////////////////////////////////////////////////////////////////  +// Footnotes generator  +/////////////////////////////////////////////////////////////////////  +  +/* Based on footnote generation code from:  + * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html  + */  +  +footnotes: function () {  + // Delete existing footnote entries in case we're reloading the footnodes.  + var i;  + var noteholder = document.getElementById("footnotes");  + if (!noteholder) {  + return;  + }  + var entriesToRemove = [];  + for (i = 0; i < noteholder.childNodes.length; i++) {  + var entry = noteholder.childNodes[i];  + if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")  + entriesToRemove.push(entry);  + }  + for (i = 0; i < entriesToRemove.length; i++) {  + noteholder.removeChild(entriesToRemove[i]);  + }  +  + // Rebuild footnote entries.  + var cont = document.getElementById("content");  + var spans = cont.getElementsByTagName("span");  + var refs = {};  + var n = 0;  + for (i=0; i<spans.length; i++) {  + if (spans[i].className == "footnote") {  + n++;  + var note = spans[i].getAttribute("data-note");  + if (!note) {  + // Use [\s\S] in place of . so multi-line matches work.  + // Because JavaScript has no s (dotall) regex flag.  + note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];  + spans[i].innerHTML =  + "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + spans[i].setAttribute("data-note", note);  + }  + noteholder.innerHTML +=  + "<div class='footnote' id='_footnote_" + n + "'>" +  + "<a href='#_footnoteref_" + n + "' title='Return to text'>" +  + n + "</a>. " + note + "</div>";  + var id =spans[i].getAttribute("id");  + if (id != null) refs["#"+id] = n;  + }  + }  + if (n == 0)  + noteholder.parentNode.removeChild(noteholder);  + else {  + // Process footnoterefs.  + for (i=0; i<spans.length; i++) {  + if (spans[i].className == "footnoteref") {  + var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");  + href = href.match(/#.*/)[0]; // Because IE return full URL.  + n = refs[href];  + spans[i].innerHTML =  + "[<a href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + }  + }  + }  +},  +  +install: function(toclevels) {  + var timerId;  +  + function reinstall() {  + asciidoc.footnotes();  + if (toclevels) {  + asciidoc.toc(toclevels);  + }  + }  +  + function reinstallAndRemoveTimer() {  + clearInterval(timerId);  + reinstall();  + }  +  + timerId = setInterval(reinstall, 500);  + if (document.addEventListener)  + document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);  + else  + window.onload = reinstallAndRemoveTimer;  +}  +  +}  +asciidoc.install();  +/*]]>*/  +</script>  +</head>  +<body class="article">  +<div id="header">  +<h1>Unit Testing</h1>  +<span id="revdate">2023-12-09</span>  +</div>  +<div id="content">  +<div id="preamble">  +<div class="sectionbody">  +<div class="paragraph"><p>In our current testing environment, we spend a significant amount of effort  +crafting end-to-end tests for error conditions that could easily be captured by  +unit tests (or we simply forgo some hard-to-setup and rare error conditions).  +Unit tests additionally provide stability to the codebase and can simplify  +debugging through isolation. Writing unit tests in pure C, rather than with our  +current shell/test-tool helper setup, simplifies test setup, simplifies passing  +data around (no shell-isms required), and reduces testing runtime by not  +spawning a separate process for every test invocation.</p></div>  +<div class="paragraph"><p>We believe that a large body of unit tests, living alongside the existing test  +suite, will improve code quality for the Git project.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_definitions">Definitions</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>For the purposes of this document, we&#8217;ll use <strong>test framework</strong> to refer to  +projects that support writing test cases and running tests within the context  +of a single executable. <strong>Test harness</strong> will refer to projects that manage  +running multiple executables (each of which may contain multiple test cases) and  +aggregating their results.</p></div>  +<div class="paragraph"><p>In reality, these terms are not strictly defined, and many of the projects  +discussed below contain features from both categories.</p></div>  +<div class="paragraph"><p>For now, we will evaluate projects solely on their framework features. Since we  +are relying on having TAP output (see below), we can assume that any framework  +can be made to work with a harness that we can choose later.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_summary">Summary</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>We believe the best way forward is to implement a custom TAP framework for the  +Git project. We use a version of the framework originally proposed in  +<a href="https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/">1</a>.</p></div>  +<div class="paragraph"><p>See the <a href="#framework-selection">Framework Selection</a> section below for the  +rationale behind this decision.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_choosing_a_test_harness">Choosing a test harness</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>During upstream discussion, it was occasionally noted that <code>prove</code> provides many  +convenient features, such as scheduling slower tests first, or re-running  +previously failed tests.</p></div>  +<div class="paragraph"><p>While we already support the use of <code>prove</code> as a test harness for the shell  +tests, it is not strictly required. The t/Makefile allows running shell tests  +directly (though with interleaved output if parallelism is enabled). Git  +developers who wish to use <code>prove</code> as a more advanced harness can do so by  +setting DEFAULT_TEST_TARGET=prove in their config.mak.</p></div>  +<div class="paragraph"><p>We will follow a similar approach for unit tests: by default the test  +executables will be run directly from the t/Makefile, but <code>prove</code> can be  +configured with DEFAULT_UNIT_TEST_TARGET=prove.</p></div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="framework-selection">Framework selection</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>There are a variety of features we can use to rank the candidate frameworks, and  +those features have different priorities:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +Critical features: we probably won&#8217;t consider a framework without these  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +Can we legally / easily use the project?  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +<a href="#license">License</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#vendorable-or-ubiquitous">Vendorable or ubiquitous</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#maintainable-extensible">Maintainable / extensible</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#major-platform-support">Major platform support</a>  +</p>  +</li>  +</ul></div>  +</li>  +<li>  +<p>  +Does the project support our bare-minimum needs?  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +<a href="#tap-support">TAP support</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#diagnostic-output">Diagnostic output</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#runtime-skippable-tests">Runtime-skippable tests</a>  +</p>  +</li>  +</ul></div>  +</li>  +</ul></div>  +</li>  +<li>  +<p>  +Nice-to-have features:  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +<a href="#parallel-execution">Parallel execution</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#mock-support">Mock support</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#signal-error-handling">Signal &amp; error-handling</a>  +</p>  +</li>  +</ul></div>  +</li>  +<li>  +<p>  +Tie-breaker stats  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +<a href="#project-kloc">Project KLOC</a>  +</p>  +</li>  +<li>  +<p>  +<a href="#adoption">Adoption</a>  +</p>  +</li>  +</ul></div>  +</li>  +</ul></div>  +<div class="sect2">  +<h3 id="license">License</h3>  +<div class="paragraph"><p>We must be able to legally use the framework in connection with Git. As Git is  +licensed only under GPLv2, we must eliminate any LGPLv3, GPLv3, or Apache 2.0  +projects.</p></div>  +</div>  +<div class="sect2">  +<h3 id="vendorable-or-ubiquitous">Vendorable or ubiquitous</h3>  +<div class="paragraph"><p>We want to avoid forcing Git developers to install new tools just to run unit  +tests. Any prospective frameworks and harnesses must either be vendorable  +(meaning, we can copy their source directly into Git&#8217;s repository), or so  +ubiquitous that it is reasonable to expect that most developers will have the  +tools installed already.</p></div>  +</div>  +<div class="sect2">  +<h3 id="maintainable-extensible">Maintainable / extensible</h3>  +<div class="paragraph"><p>It is unlikely that any pre-existing project perfectly fits our needs, so any  +project we select will need to be actively maintained and open to accepting  +changes. Alternatively, assuming we are vendoring the source into our repo, it  +must be simple enough that Git developers can feel comfortable making changes as  +needed to our version.</p></div>  +<div class="paragraph"><p>In the comparison table below, "True" means that the framework seems to have  +active developers, that it is simple enough that Git developers can make changes  +to it, and that the project seems open to accepting external contributions (or  +that it is vendorable). "Partial" means that at least one of the above  +conditions holds.</p></div>  +</div>  +<div class="sect2">  +<h3 id="major-platform-support">Major platform support</h3>  +<div class="paragraph"><p>At a bare minimum, unit-testing must work on Linux, MacOS, and Windows.</p></div>  +<div class="paragraph"><p>In the comparison table below, "True" means that it works on all three major  +platforms with no issues. "Partial" means that there may be annoyances on one or  +more platforms, but it is still usable in principle.</p></div>  +</div>  +<div class="sect2">  +<h3 id="tap-support">TAP support</h3>  +<div class="paragraph"><p>The <a href="https://testanything.org/">Test Anything Protocol</a> is a text-based interface  +that allows tests to communicate with a test harness. It is already used by  +Git&#8217;s integration test suite. Supporting TAP output is a mandatory feature for  +any prospective test framework.</p></div>  +<div class="paragraph"><p>In the comparison table below, "True" means this is natively supported.  +"Partial" means TAP output must be generated by post-processing the native  +output.</p></div>  +<div class="paragraph"><p>Frameworks that do not have at least Partial support will not be evaluated  +further.</p></div>  +</div>  +<div class="sect2">  +<h3 id="diagnostic-output">Diagnostic output</h3>  +<div class="paragraph"><p>When a test case fails, the framework must generate enough diagnostic output to  +help developers find the appropriate test case in source code in order to debug  +the failure.</p></div>  +</div>  +<div class="sect2">  +<h3 id="runtime-skippable-tests">Runtime-skippable tests</h3>  +<div class="paragraph"><p>Test authors may wish to skip certain test cases based on runtime circumstances,  +so the framework should support this.</p></div>  +</div>  +<div class="sect2">  +<h3 id="parallel-execution">Parallel execution</h3>  +<div class="paragraph"><p>Ideally, we will build up a significant collection of unit test cases, most  +likely split across multiple executables. It will be necessary to run these  +tests in parallel to enable fast develop-test-debug cycles.</p></div>  +<div class="paragraph"><p>In the comparison table below, "True" means that individual test cases within a  +single test executable can be run in parallel. We assume that executable-level  +parallelism can be handled by the test harness.</p></div>  +</div>  +<div class="sect2">  +<h3 id="mock-support">Mock support</h3>  +<div class="paragraph"><p>Unit test authors may wish to test code that interacts with objects that may be  +inconvenient to handle in a test (e.g. interacting with a network service).  +Mocking allows test authors to provide a fake implementation of these objects  +for more convenient tests.</p></div>  +</div>  +<div class="sect2">  +<h3 id="signal-error-handling">Signal &amp; error handling</h3>  +<div class="paragraph"><p>The test framework should fail gracefully when test cases are themselves buggy  +or when they are interrupted by signals during runtime.</p></div>  +</div>  +<div class="sect2">  +<h3 id="project-kloc">Project KLOC</h3>  +<div class="paragraph"><p>The size of the project, in thousands of lines of code as measured by  +<a href="https://dwheeler.com/sloccount/">sloccount</a> (rounded up to the next multiple of  +1,000). As a tie-breaker, we probably prefer a project with fewer LOC.</p></div>  +</div>  +<div class="sect2">  +<h3 id="adoption">Adoption</h3>  +<div class="paragraph"><p>As a tie-breaker, we prefer a more widely-used project. We use the number of  +GitHub / GitLab stars to estimate this.</p></div>  +</div>  +<div class="sect2">  +<h3 id="_comparison">Comparison</h3>  +<div class="tableblock">  +<table rules="all"  +width="33%"  +frame="border"  +cellspacing="0" cellpadding="4">  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<col width="4%" />  +<thead>  +<tr>  +<th align="left" valign="top">Framework</th>  +<th align="left" valign="top"><a href="#license">License</a></th>  +<th align="left" valign="top"><a href="#vendorable-or-ubiquitous">Vendorable or ubiquitous</a></th>  +<th align="left" valign="top"><a href="#maintainable-extensible">Maintainable / extensible</a></th>  +<th align="left" valign="top"><a href="#major-platform-support">Major platform support</a></th>  +<th align="left" valign="top"><a href="#tap-support">TAP support</a></th>  +<th align="left" valign="top"><a href="#diagnostic-output">Diagnostic output</a></th>  +<th align="left" valign="top"><a href="#runtime--skippable-tests">Runtime- skippable tests</a></th>  +<th align="left" valign="top"><a href="#parallel-execution">Parallel execution</a></th>  +<th align="left" valign="top"><a href="#mock-support">Mock support</a></th>  +<th align="left" valign="top"><a href="#signal-error-handling">Signal &amp; error handling</a></th>  +<th align="left" valign="top"><a href="#project-kloc">Project KLOC</a></th>  +<th align="left" valign="top"><a href="#adoption">Adoption</a></th>  +</tr>  +</thead>  +<tbody>  +<tr>  +<td align="left" valign="top"><p class="table"><a href="https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/">Custom Git impl.</a></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">GPL v2</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table">1</p></td>  +<td align="left" valign="top"><p class="table">0</p></td>  +</tr>  +<tr>  +<td align="left" valign="top"><p class="table"><a href="https://github.com/silentbicycle/greatest">Greatest</a></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">ISC</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table">3</p></td>  +<td align="left" valign="top"><p class="table">1400</p></td>  +</tr>  +<tr>  +<td align="left" valign="top"><p class="table"><a href="https://github.com/Snaipe/Criterion">Criterion</a></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">MIT</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table">19</p></td>  +<td align="left" valign="top"><p class="table">1800</p></td>  +</tr>  +<tr>  +<td align="left" valign="top"><p class="table"><a href="https://github.com/rra/c-tap-harness/">C TAP</a></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">Expat</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table">4</p></td>  +<td align="left" valign="top"><p class="table">33</p></td>  +</tr>  +<tr>  +<td align="left" valign="top"><p class="table"><a href="https://libcheck.github.io/check/">Check</a></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">LGPL v2.1</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="yellow-background">Partial</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="red-background">False</span></p></td>  +<td align="left" valign="top"><p class="table"><span class="lime-background">True</span></p></td>  +<td align="left" valign="top"><p class="table">17</p></td>  +<td align="left" valign="top"><p class="table">973</p></td>  +</tr>  +</tbody>  +</table>  +</div>  +</div>  +<div class="sect2">  +<h3 id="_additional_framework_candidates">Additional framework candidates</h3>  +<div class="paragraph"><p>Several suggested frameworks have been eliminated from consideration:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +Incompatible licenses:  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +<a href="https://github.com/zorgnax/libtap">libtap</a> (LGPL v3)  +</p>  +</li>  +<li>  +<p>  +<a href="https://cmocka.org/">cmocka</a> (Apache 2.0)  +</p>  +</li>  +</ul></div>  +</li>  +<li>  +<p>  +Missing source: <a href="https://www.kindahl.net/mytap/doc/index.html">MyTap</a>  +</p>  +</li>  +<li>  +<p>  +No TAP support:  +</p>  +<div class="ulist"><ul>  +<li>  +<p>  +<a href="https://nemequ.github.io/munit/">µnit</a>  +</p>  +</li>  +<li>  +<p>  +<a href="https://github.com/google/cmockery">cmockery</a>  +</p>  +</li>  +<li>  +<p>  +<a href="https://github.com/lpabon/cmockery2">cmockery2</a>  +</p>  +</li>  +<li>  +<p>  +<a href="https://github.com/ThrowTheSwitch/Unity">Unity</a>  +</p>  +</li>  +<li>  +<p>  +<a href="https://github.com/siu/minunit">minunit</a>  +</p>  +</li>  +<li>  +<p>  +<a href="https://cunit.sourceforge.net/">CUnit</a>  +</p>  +</li>  +</ul></div>  +</li>  +</ul></div>  +</div>  +</div>  +</div>  +<div class="sect1">  +<h2 id="_milestones">Milestones</h2>  +<div class="sectionbody">  +<div class="ulist"><ul>  +<li>  +<p>  +Add useful tests of library-like code  +</p>  +</li>  +<li>  +<p>  +Integrate with  + <a href="https://lore.kernel.org/git/20230502211454.1673000-1-calvinwan@google.com/">stdlib  + work</a>  +</p>  +</li>  +<li>  +<p>  +Run alongside regular <code>make test</code> target  +</p>  +</li>  +</ul></div>  +</div>  +</div>  +</div>  +<div id="footnotes"><hr /></div>  +<div id="footer">  +<div id="footer-text">  +Last updated  + 2023-12-09 17:40:53 PST  +</div>  +</div>  +</body>  +</html>  
diff --git a/technical/unit-tests.txt b/technical/unit-tests.txt new file mode 100644 index 0000000..206037f --- /dev/null +++ b/technical/unit-tests.txt 
@@ -0,0 +1,240 @@ += Unit Testing + +In our current testing environment, we spend a significant amount of effort +crafting end-to-end tests for error conditions that could easily be captured by +unit tests (or we simply forgo some hard-to-setup and rare error conditions). +Unit tests additionally provide stability to the codebase and can simplify +debugging through isolation. Writing unit tests in pure C, rather than with our +current shell/test-tool helper setup, simplifies test setup, simplifies passing +data around (no shell-isms required), and reduces testing runtime by not +spawning a separate process for every test invocation. + +We believe that a large body of unit tests, living alongside the existing test +suite, will improve code quality for the Git project. + +== Definitions + +For the purposes of this document, we'll use *test framework* to refer to +projects that support writing test cases and running tests within the context +of a single executable. *Test harness* will refer to projects that manage +running multiple executables (each of which may contain multiple test cases) and +aggregating their results. + +In reality, these terms are not strictly defined, and many of the projects +discussed below contain features from both categories. + +For now, we will evaluate projects solely on their framework features. Since we +are relying on having TAP output (see below), we can assume that any framework +can be made to work with a harness that we can choose later. + + +== Summary + +We believe the best way forward is to implement a custom TAP framework for the +Git project. We use a version of the framework originally proposed in +https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/[1]. + +See the <<framework-selection,Framework Selection>> section below for the +rationale behind this decision. + + +== Choosing a test harness + +During upstream discussion, it was occasionally noted that `prove` provides many +convenient features, such as scheduling slower tests first, or re-running +previously failed tests. + +While we already support the use of `prove` as a test harness for the shell +tests, it is not strictly required. The t/Makefile allows running shell tests +directly (though with interleaved output if parallelism is enabled). Git +developers who wish to use `prove` as a more advanced harness can do so by +setting DEFAULT_TEST_TARGET=prove in their config.mak. + +We will follow a similar approach for unit tests: by default the test +executables will be run directly from the t/Makefile, but `prove` can be +configured with DEFAULT_UNIT_TEST_TARGET=prove. + + +[[framework-selection]] +== Framework selection + +There are a variety of features we can use to rank the candidate frameworks, and +those features have different priorities: + +* Critical features: we probably won't consider a framework without these +** Can we legally / easily use the project? +*** <<license,License>> +*** <<vendorable-or-ubiquitous,Vendorable or ubiquitous>> +*** <<maintainable-extensible,Maintainable / extensible>> +*** <<major-platform-support,Major platform support>> +** Does the project support our bare-minimum needs? +*** <<tap-support,TAP support>> +*** <<diagnostic-output,Diagnostic output>> +*** <<runtime-skippable-tests,Runtime-skippable tests>> +* Nice-to-have features: +** <<parallel-execution,Parallel execution>> +** <<mock-support,Mock support>> +** <<signal-error-handling,Signal & error-handling>> +* Tie-breaker stats +** <<project-kloc,Project KLOC>> +** <<adoption,Adoption>> + +[[license]] +=== License + +We must be able to legally use the framework in connection with Git. As Git is +licensed only under GPLv2, we must eliminate any LGPLv3, GPLv3, or Apache 2.0 +projects. + +[[vendorable-or-ubiquitous]] +=== Vendorable or ubiquitous + +We want to avoid forcing Git developers to install new tools just to run unit +tests. Any prospective frameworks and harnesses must either be vendorable +(meaning, we can copy their source directly into Git's repository), or so +ubiquitous that it is reasonable to expect that most developers will have the +tools installed already. + +[[maintainable-extensible]] +=== Maintainable / extensible + +It is unlikely that any pre-existing project perfectly fits our needs, so any +project we select will need to be actively maintained and open to accepting +changes. Alternatively, assuming we are vendoring the source into our repo, it +must be simple enough that Git developers can feel comfortable making changes as +needed to our version. + +In the comparison table below, "True" means that the framework seems to have +active developers, that it is simple enough that Git developers can make changes +to it, and that the project seems open to accepting external contributions (or +that it is vendorable). "Partial" means that at least one of the above +conditions holds. + +[[major-platform-support]] +=== Major platform support + +At a bare minimum, unit-testing must work on Linux, MacOS, and Windows. + +In the comparison table below, "True" means that it works on all three major +platforms with no issues. "Partial" means that there may be annoyances on one or +more platforms, but it is still usable in principle. + +[[tap-support]] +=== TAP support + +The https://testanything.org/[Test Anything Protocol] is a text-based interface +that allows tests to communicate with a test harness. It is already used by +Git's integration test suite. Supporting TAP output is a mandatory feature for +any prospective test framework. + +In the comparison table below, "True" means this is natively supported. +"Partial" means TAP output must be generated by post-processing the native +output. + +Frameworks that do not have at least Partial support will not be evaluated +further. + +[[diagnostic-output]] +=== Diagnostic output + +When a test case fails, the framework must generate enough diagnostic output to +help developers find the appropriate test case in source code in order to debug +the failure. + +[[runtime-skippable-tests]] +=== Runtime-skippable tests + +Test authors may wish to skip certain test cases based on runtime circumstances, +so the framework should support this. + +[[parallel-execution]] +=== Parallel execution + +Ideally, we will build up a significant collection of unit test cases, most +likely split across multiple executables. It will be necessary to run these +tests in parallel to enable fast develop-test-debug cycles. + +In the comparison table below, "True" means that individual test cases within a +single test executable can be run in parallel. We assume that executable-level +parallelism can be handled by the test harness. + +[[mock-support]] +=== Mock support + +Unit test authors may wish to test code that interacts with objects that may be +inconvenient to handle in a test (e.g. interacting with a network service). +Mocking allows test authors to provide a fake implementation of these objects +for more convenient tests. + +[[signal-error-handling]] +=== Signal & error handling + +The test framework should fail gracefully when test cases are themselves buggy +or when they are interrupted by signals during runtime. + +[[project-kloc]] +=== Project KLOC + +The size of the project, in thousands of lines of code as measured by +https://dwheeler.com/sloccount/[sloccount] (rounded up to the next multiple of +1,000). As a tie-breaker, we probably prefer a project with fewer LOC. + +[[adoption]] +=== Adoption + +As a tie-breaker, we prefer a more widely-used project. We use the number of +GitHub / GitLab stars to estimate this. + + +=== Comparison + +:true: [lime-background]#True# +:false: [red-background]#False# +:partial: [yellow-background]#Partial# + +:gpl: [lime-background]#GPL v2# +:isc: [lime-background]#ISC# +:mit: [lime-background]#MIT# +:expat: [lime-background]#Expat# +:lgpl: [lime-background]#LGPL v2.1# + +:custom-impl: https://lore.kernel.org/git/c902a166-98ce-afba-93f2-ea6027557176@gmail.com/[Custom Git impl.] +:greatest: https://github.com/silentbicycle/greatest[Greatest] +:criterion: https://github.com/Snaipe/Criterion[Criterion] +:c-tap: https://github.com/rra/c-tap-harness/[C TAP] +:check: https://libcheck.github.io/check/[Check] + +[format="csv",options="header",width="33%",subs="specialcharacters,attributes,quotes,macros"] +|===== +Framework,"<<license,License>>","<<vendorable-or-ubiquitous,Vendorable or ubiquitous>>","<<maintainable-extensible,Maintainable / extensible>>","<<major-platform-support,Major platform support>>","<<tap-support,TAP support>>","<<diagnostic-output,Diagnostic output>>","<<runtime--skippable-tests,Runtime- skippable tests>>","<<parallel-execution,Parallel execution>>","<<mock-support,Mock support>>","<<signal-error-handling,Signal & error handling>>","<<project-kloc,Project KLOC>>","<<adoption,Adoption>>" +{custom-impl},{gpl},{true},{true},{true},{true},{true},{true},{false},{false},{false},1,0 +{greatest},{isc},{true},{partial},{true},{partial},{true},{true},{false},{false},{false},3,1400 +{criterion},{mit},{false},{partial},{true},{true},{true},{true},{true},{false},{true},19,1800 +{c-tap},{expat},{true},{partial},{partial},{true},{false},{true},{false},{false},{false},4,33 +{check},{lgpl},{false},{partial},{true},{true},{true},{false},{false},{false},{true},17,973 +|===== + +=== Additional framework candidates + +Several suggested frameworks have been eliminated from consideration: + +* Incompatible licenses: +** https://github.com/zorgnax/libtap[libtap] (LGPL v3) +** https://cmocka.org/[cmocka] (Apache 2.0) +* Missing source: https://www.kindahl.net/mytap/doc/index.html[MyTap] +* No TAP support: +** https://nemequ.github.io/munit/[µnit] +** https://github.com/google/cmockery[cmockery] +** https://github.com/lpabon/cmockery2[cmockery2] +** https://github.com/ThrowTheSwitch/Unity[Unity] +** https://github.com/siu/minunit[minunit] +** https://cunit.sourceforge.net/[CUnit] + + +== Milestones + +* Add useful tests of library-like code +* Integrate with + https://lore.kernel.org/git/20230502211454.1673000-1-calvinwan@google.com/[stdlib + work] +* Run alongside regular `make test` target 
diff --git a/user-manual.html b/user-manual.html index 13915fd..0050db0 100644 --- a/user-manual.html +++ b/user-manual.html 
@@ -1,5 +1,5 @@  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="id-1"></a>Git User Manual</h1></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left"></td><td align="left">2023-11-20</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#_introduction">Introduction</a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a Git repository via the Git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via HTTP</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#how-to-get-a-git-repository-with-minimal-history">How to get a Git repository with minimal history</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How Git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#pitfalls-with-submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dd><dl><dt><span class="section"><a href="#git-explained">Git explained</a></span></dt></dl></dd><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt><dd><dl><dt><span class="section"><a href="#todo-list">Todo list</a></span></dt></dl></dd></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="_introduction"></a>Introduction</h1></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="id-1"></a>Git User Manual</h1></div><div><div class="revhistory"><table style="border-style:solid; width:100%;" summary="Revision History"><tr><th align="left" valign="top" colspan="2"><b>Revision History</b></th></tr><tr><td align="left"></td><td align="left">2023-12-09</td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#_introduction">Introduction</a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a Git repository via the Git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via HTTP</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#how-to-get-a-git-repository-with-minimal-history">How to get a Git repository with minimal history</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How Git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#pitfalls-with-submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dd><dl><dt><span class="section"><a href="#git-explained">Git explained</a></span></dt></dl></dd><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt><dd><dl><dt><span class="section"><a href="#todo-list">Todo list</a></span></dt></dl></dd></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="_introduction"></a>Introduction</h1></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX  command-line skills, but no previous knowledge of Git.</p><p><a class="xref" href="#repositories-and-branches" title="Chapter 1. Repositories and Branches">Chapter 1, <i>Repositories and Branches</i></a> and <a class="xref" href="#exploring-git-history" title="Chapter 2. Exploring Git history">Chapter 2, <i>Exploring Git history</i></a> explain how  to fetch and study a project using git—read these chapters to learn how  to build and test a particular version of a software project, search for